Skip to content

A Yii2 extension to generate sitemap files for large web-sites in console

License

Notifications You must be signed in to change notification settings

zhelyabuzhsky/yii2-sitemap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sitemap.xml generator for Yii2

Build Status Total Downloads

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();
    }
}
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.