Skip to content

skuola/SitemapBundle

Repository files navigation

SitemapBundle

SensioLabsInsight Build Status

##Installation

Install the bundle:

composer require skuola/sitemap-bundle

Register the bundle in app/AppKernel.php:

<?php
// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Skuola\SitemapBundle\SkuolaSitemapBundle()
    );
}

##Basic Configuration

# app/config/config.yml
skuola_sitemap:
    scheme: http
    host: www.example.com
    db_driver: orm # orm|mongodb
    sitemaps:
        FirstSitemap:    
            index:
                # If you want to specify a custom base url for sitemap_index
                base_url: ~ # Or your custom base url: http://%domain%/sitemaps/home
                path: ~ # %kernel.root_dir%/../web/sitemap_index.xml
            path: ~ # %kernel.root_dir%/../web/sitemap.xml
            routes:
                category_show:
                    options:
                        slug:
                            repository:
                                object: SkuolaTestBundle:Category
                                property: slug
                                method: findPublic
                        type:
                            defaults: ["free", "open-source", "premium"]
                    changefreq: weekly
                    priority: 0.5
                open_source_post:
                    options:
                        slug:
                            repository:
                                object: SkuolaTestBundle:Category
                                property: slug
                                method: findBySlug
                                #Call findWithSlug($slug) method with custom arguments
                                arguments: ["open-source"]
                    changefreq: weekly
                    priority: 0.3
                tag_show:
                    options:
                        slug:
                            repository:
                                object: SkuolaTestBundle:Tag
                                property: slug
                        type:
                            repository:
                                object: SkuolaTestBundle:Type
                                property: id
                                method: findEnabled
                             #merge repository results with defaults options   
                            defaults: [0]
                    changefreq: weekly
                    priority: 0.8

##Multi Sitemaps

skuola_sitemap:
    scheme: http
    host: www.example.com
    db_driver: orm
    sitemaps:
        Blog:
            index:
                base_url: http://www.example.com/sitemaps/home
                path: %kernel.root_dir%/../web/shared/sitemaps/home/sitemap_index.xml
            path: %kernel.root_dir%/../web/shared/sitemaps/home/sitemap.xml
            routes:
                ...
        Store:
            index:
                base_url: http://www.example.com/sitemaps/store
                path: %kernel.root_dir%/../web/shared/sitemaps/store/sitemap_index.xml
            path: %kernel.root_dir%/../web/shared/sitemaps/store/sitemap.xml
            routes:
                ...

##Configuration with custom service:

###Example Routing

# app/config/test_routing.yml
page_show: 
    path: /{category_slug}/{page_slug}

Configuration

# app/config/config.yml
skuola_sitemap:
    scheme: http
    host: www.example.com
    db_driver: orm
    sitemaps:
        FirstSitemap:
            routes:
                page_show:
                    provider: skuola_testbundle.sitemap.page_provider
                    changefreq: weekly
                    priority: 0.5

Create your generator service, implements Skuola\SitemapBundle\Service\ParametersCollectionInterface

# src/TestBundle/Resources/config/services.yml
services:
  skuola_testbundle.sitemap.page_provider:
      class: Skuola\TestBundle\Service\Sitemap\PageProvider
      arguments: [@doctrine.orm.entity_manager]

Create PageProvider class

use Skuola\SitemapBundle\Service\ParametersCollectionInterface;
class PageProvider implements ParametersCollectionInterface {
    protected $entityManager;
    public function __construct($entityManager)
    {
        $this->entityManager = $entityManager;
    }
    //Implement getParametersCollection()
    public function getParametersCollection() {
        $collection = [];
        $pages = $this->entityManager->getRepository('Page')->findAll();
        foreach($pages as $page) {
            $collection[] = [
               'category_slug' => $page->getCategory()->getSlug(),
               'page_slug'     => $page->getSlug()
            ]
        }
        return $collection;
    }
}

Run

app/console sitemap:generator

Run single Sitemap

app/console sitemap:generator --name "FirstSitemap"

SitemapGeneratorCommand