zhelyabuzhsky / yii2-sitemap
A Yii2 tool to generate sitemap.xml.
Installs: 36 291
Dependents: 1
Suggesters: 0
Security: 0
Stars: 35
Watchers: 6
Forks: 11
Open Issues: 0
Type:yii2-extension
Requires
- yiisoft/yii2: *
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2025-02-22 16:51:56 UTC
README
Yii2 extension to generate sitemap files for large web-sites through Yii2 console command
Installation
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.
Features
- Generates multiple sitemaps (large sites)
- Creates index sitemap file
- Gzip compression of .xml files
- Disallow urls support (through regular expression array)
Configuration
1. Configure urlManager
at console config
'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' => [ //... ], ]; ?>
2. Configure Sitemap
component at console config components section
'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.
Usage
1. Impement SitemapEntityInterface
for the models you want to use at sitemap
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(); } }
3. Run console command
php yii sitemap/create
Testing
Set enviroment variable SERVER_NAME (e.g. https://example.com)
$ ./vendor/bin/phpunit
Security
If you discover any security related issues, please email zhelyabuzhsky@icloud.com instead of using the issue tracker.
Credits
License
GNU General Public License, version 3. Please see License File for more information.