Yii2 extension to generate sitemap files for large web-sites through Yii2 console command
The preferred way to install this extension is through composer.
$ php composer.phar require zhelyabuzhsky/yii2-sitemap
or add
"zhelyabuzhsky/yii2-sitemap": "^1.1"
to the require section of your composer.json
file.
- Generates multiple sitemaps (large sites)
- Creates index sitemap file
- Gzip compression of .xml files
- Disallow urls support (through regular expression array)
'urlManager' => [
'hostInfo' => 'https://example.com',
'baseUrl' => '/',
'rules' => [
// ...
],
],
NOTE Both params hostInfo
and baseUrl
are required for Yii2 console app.
NOTE urlManager
rules
section usually repeats your frontend urlManager
configuration, so you could merge it at console config (see yiisoft/yii2#1578 (comment)):
Show details
console/main.php
$frontendUrlManager = require(__DIR__ . '/../../frontend/config/UrlManager.php');
//...
'urlManager' => array_merge($frontendUrlManager, [
'hostInfo' => 'https://example.com'
]),
frontend/config/UrlManager.php
<?php
return [
'baseUrl' => '/',
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//...
],
];
?>
'components' => [
'sitemap' => [
'class' => '\zhelyabuzhsky\sitemap\components\Sitemap',
],
],
Example of using extra Sitemap
params
'components' => [
'sitemap' => [
'class' => '\zhelyabuzhsky\sitemap\components\Sitemap',
'maxUrlsCountInFile' => 10000,
'sitemapDirectory' => 'frontend/web',
'optionalAttributes' => ['changefreq', 'lastmod', 'priority'],
'maxFileSize' => '10M',
],
],
where
maxUrlsCountInFile
- max count of urls in one sitemap file;sitemapDirectory
- directory to place sitemap files;optionalAttributes
- list of used optional attributes;maxFileSize
- maximal file size. Zero to work without limits. So you can specify the following abbreviations k - kilobytes and m - megabytes. By default 10m.
Show example
common\models\Category.php
use yii\db\ActiveRecord;
use zhelyabuzhsky\sitemap\models\SitemapEntityInterface;
class Category extends ActiveRecord implements SitemapEntityInterface
{
/**
* @inheritdoc
*/
public function getSitemapLastmod()
{
return date('c');
}
/**
* @inheritdoc
*/
public function getSitemapChangefreq()
{
return 'daily';
}
/**
* @inheritdoc
*/
public function getSitemapPriority()
{
return 0.5;
}
/**
* @inheritdoc
*/
public function getSitemapLoc()
{
// Use urlManager rules to create urls
return $url = Yii::$app->urlManager->createAbsoluteUrl([
'page/view',
'pageSlug' => $this->slug,
]);
// or directly
// return 'http://localhost/' . $this->slug;
}
/**
* @inheritdoc
*/
public static function getSitemapDataSource()
{
return self::find();
}
}
2. Create Yii2 controller for console command
use yii\console\Controller;
class SitemapController extends Controller
{
public function actionCreate()
{
\Yii::$app->sitemap
->addModel(Item::className())
->addModel(Category::className(), \Yii::$app->db) // Also you can pass \yii\db\Connection to the database connection that you need to use
->setDisallowUrls([
'#url1#',
'#url2$#',
])
->create();
}
}
php yii sitemap/create
Set enviroment variable SERVER_NAME (e.g. https://example.com)
$ ./vendor/bin/phpunit
If you discover any security related issues, please email zhelyabuzhsky@icloud.com instead of using the issue tracker.
GNU General Public License, version 3. Please see License File for more information.