SitemapBundle
![Software License][ico-license]
![SensioLabs Insight][ico-sensio]
![Coverage Status][ico-scrutinizer]
, (*1)
This Bundle provides a way to create a xml sitemap using any source
you want (Doctrine, Propel, MongoDB, Faker, etc.)., (*2)
This bundle aims to generate standards compliant sitemaps. For more information
about sitemaps go to sitemaps.org., (*3)
The sitemap generation part is handled by the SitemapGenerator
library, this bundle eases its integration into a Symfony2 application., (*4)
Main features
- static sitemap generation
- dynamic sitemap generation
- sitemap index generation
- memory efficient
- datasource independent
- support for media content (currently images and videos)
Install
Via Composer, (*5)
``` bash
$ composer require larapulse/sitemap-bundle, (*6)
Register the `SitemapBundle` in `app/AppKernel.php`:
```php
# app/AppKernel.php
public function registerBundles()
{
$bundles = [
// ...
new Larapulse\SitemapBundle\LarapulseSitemapBundle(),
];
}
Configuration
Add the following options to app/config/config.yml
file:, (*7)
larapulse_sitemap:
base_host: http://www.foo.com
base_host_sitemap: http://www.foo.com
limit: 50000
Note:, (*8)
- The
base_host
will be prepended to relative urls added to the sitemap.
- The
base_host_sitemap
will be prepended to the sitemap filename (used for sitemap index)
- The
limit
is the number of url allowed in the same sitemap, if defined it will create a sitemap index
Routing
If you don't want to use the console to generate the sitemap, import the
routes:, (*9)
larapulse_sitemap:
resource: "@LarapulseSitemapBundle/Resources/config/routing.yml"
This will make the sitemap available from the /sitemap.xml
URL., (*10)
Usage
Add this line /web/sitemap.xml*
to your .gitignore
to prevent tracking sitemap.xml
files by version control system., (*11)
Providers
In order to support any kind of datasource, the sitemap uses providers to fetch
the data., (*12)
Exemple provider:, (*13)
<?php
namespace SitemapGenerator\Provider;
use SitemapGenerator\Entity\Url;
use SitemapGenerator\Provider\ProviderInterface;
use SitemapGenerator\Sitemap\Sitemap;
class CustomProvider implements ProviderInterface
{
public function populate(Sitemap $sitemap)
{
$url = new Url();
$url->setLoc('http://www.google.de');
$url->setChangefreq(Url::CHANGEFREQ_NEVER);
$url->setLastmod('2012-12-19 02:28');
$sitemap->add($url);
}
}
All the providers implement the ProviderInterface
, which define the
populate()
method., (*14)
Note: so they can be automatically used by the sitemap, providers have to be
described in the DIC with the sitemap.provider
tag:, (*15)
services:
sitemap_custom_provider:
class: SitemapGenerator\Provider\CustomProvider
tags:
- { name: sitemap.provider }
All the services tagged as sitemap.provider
will be used to generate the
sitemap., (*16)
Simple provider
A provider to add static routes into the sitemap easily., (*17)
parameters:
sitemap.simple_options:
routes:
- {name: homepage}
- name: foo
params: {foo: bar}
lastmod: '2017-11-23'
changefreq: monthly
priority: 0.5
# the following parameters are optionnal
lastmod: '2015-01-01'
changefreq: never
priority: 0.2
services:
sitemap_simple_provider:
class: SitemapGenerator\Provider\SimpleProvider
arguments: [ @router, %sitemap.simple_options% ]
tags:
- { name: sitemap.provider }
Propel provider
A propel provider is included in the bundle. It allows to populate a sitemap
with the content of a table., (*18)
Here is how you would configure the provider:, (*19)
# app/config/parameters.yml
parameters:
sitemap.propel_options:
model: ACME\DemoBundle\Model\News
# /news/{id}
loc: {route: news_show, params: {id: slug}}
# the following parameters are optionnal
filters: ['filterByIsValid']
lastmod: date
changefreq: daily
priority: 0.2
# app/config/services.yml
services:
sitemap_propel_provider:
class: SitemapGenerator\Provider\PropelProvider
arguments:
- "@router"
- "%sitemap.propel_options%"
tags:
- { name: sitemap.provider }
Doctrine provider
A doctrine provider is included in the bundle. It allows to populate a sitemap
with the content of a table., (*20)
Here is how you would configure the provider:, (*21)
# app/config/parameters.yml
parameters:
sitemap.doctrine_options:
entity: AcmeDemoBundle:News
# /news/{id}
loc: {route: news_show, params: {id: slug}}
# the following parameters are optionnal
query_method: findValidQuery
lastmod: updatedAt
changefreq: daily
priority: 0.2
# app/config/services.yml
services:
sitemap_doctrine_provider:
class: SitemapGenerator\Provider\DoctrineProvider
arguments:
- "@doctrine.orm.entity_manager"
- "@router"
- "%sitemap.doctrine_options%"
tags:
- { name: sitemap.provider }
Change log
Please see CHANGELOG for more information on what has changed recently., (*22)
Testing
bash
$ composer test
, (*23)
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details., (*24)
Security
If you discover any security related issues, please email :author_email instead of using the issue tracker., (*25)
Credits
License
The MIT License (MIT). Please see License File for more information.
This project was forked from sitemap-php/KPhoenSitemapBundle, (*26)