assayer-pro/yii2-sitemap-module

用于自动生成XML Sitemap的Yii2模块

安装次数: 12,098

依赖者: 1

建议者: 0

安全: 0

星标: 5

关注者: 4

分支: 41

开放问题: 1

类型:yii2-extension

1.3.6 2017-12-12 18:59 UTC

This package is auto-updated.

Last update: 2024-08-29 23:14:57 UTC


README

PHP version Scrutinizer Code Quality Code Coverage Build Status

用于自动生成XML Sitemap的Yii2模块。

安装

通过 composer 安装此扩展是首选方式。

  • 运行以下命令
php composer.phar require --prefer-dist "assayer-pro/yii2-sitemap-module" "*"

或者将以下内容添加到应用程序的 composer.json 文件的 require 部分

"assayer-pro/yii2-sitemap-module" : "*"

require

  • 配置应用程序配置文件中的 cache 组件,例如
'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
]
  • 在应用程序配置文件的 modules 部分中添加新的模块,例如
'modules' => [
    'sitemap' => [
        'class' => 'assayerpro\sitemap\Module',
    ],
...
],
  • 在组件部分中添加对 sitemap 的配置
'components' => [
    'robotsTxt' => [
        'class' => 'assayerpro\sitemap\RobotsTxt',
        'userAgent' => [
            // Disallow url for all bots
            '*' => [
                'Disallow' => [
                    ['/api/default/index'],
                ],
                'Allow' => [
                    ['/api/doc/index'],
                ],
            ],
            // Block a specific image from Google Images
            'Googlebot-Image' => [
                'Disallow' => [
                    // All images on your site from Google Images
                    '/',
                    // Files of a specific file type (for example, .gif)
                    '/*.gif$',
                ],
            ],
        ],
    ],
    'sitemap' => [
        'class' => 'assayerpro\sitemap\Sitemap',
        'models' => [
            // your models
            'app\modules\news\models\News',
            // or configuration for creating a behavior
            [
                'class' => 'app\modules\news\models\News',
                'behaviors' => [
                    'sitemap' => [
                        'class' => '\assayerpro\sitemap\behaviors\SitemapBehavior',
                        'scope' => function ($model) {
                            /** @var \yii\db\ActiveQuery $model */
                            $model->select(['url', 'lastmod']);
                            $model->andWhere(['is_deleted' => 0]);
                        },
                        'dataClosure' => function ($model) {
                            /** @var self $model */
                            return [
                                'loc' => Url::to($model->url, true),
                                'lastmod' => strtotime($model->lastmod),
                                'changefreq' => \assayerpro\sitemap\Sitemap::DAILY,
                                'priority' => 0.8
                            ];
                        }
                    ],
                ],
            ],
        ],
        'urls'=> [
            // your additional urls
            [
                'loc' => ['/news/default/index'],
                'changefreq' => \assayerpro\sitemap\Sitemap::DAILY,
                'priority' => 0.8,
                'news' => [
                    'publication'   => [
                        'name'          => 'Example Blog',
                        'language'      => 'en',
                    ],
                    'access'            => 'Subscription',
                    'genres'            => 'Blog, UserGenerated',
                    'publication_date'  => 'YYYY-MM-DDThh:mm:ssTZD',
                    'title'             => 'Example Title',
                    'keywords'          => 'example, keywords, comma-separated',
                    'stock_tickers'     => 'NASDAQ:A, NASDAQ:B',
                ],
                'images' => [
                    [
                        'loc'           => 'http://example.com/image.jpg',
                        'caption'       => 'This is an example of a caption of an image',
                        'geo_location'  => 'City, State',
                        'title'         => 'Example image',
                        'license'       => 'http://example.com/license',
                    ],
                ],
            ],
        ],
        'enableGzip' => true, // default is false
        'cacheExpire' => 1, // 1 second. Default is 24 hours,
        'sortByPriority' => true, // default is false
    ],
],
  • 在 AR 模型中添加行为,例如
use assayerpro\sitemap\behaviors\SitemapBehavior;

public function behaviors()
{
    return [
        'sitemap' => [
            'class' => SitemapBehavior::className(),
            /**'batchSize' => 100,*/
            'scope' => function ($model) {
                /** @var \yii\db\ActiveQuery $model */
                $model->select(['url', 'lastmod']);
                $model->andWhere(['is_deleted' => 0]);
            },
            'dataClosure' => function ($model) {
                /** @var self $model */
                return [
                    'loc' => Url::to($model->url, true),
                    'lastmod' => strtotime($model->lastmod),
                    'changefreq' => Sitemap::DAILY,
                    'priority' => 0.8
                ];
            }
        ],
    ];
}
  • 在应用程序配置文件的 urlManager 中添加新的规则,例如
'urlManager' => [
    'rules' => [
        ['pattern' => 'sitemap-<id:\d+>', 'route' => '/sitemap/default/index', 'suffix' => '.xml'],
        ['pattern' => 'sitemap', 'route' => 'sitemap/default/index', 'suffix' => '.xml'],
    ],
],

控制台生成 sitemap

从模块配置中移除 sitemap 部分

添加控制台命令配置

    'controllerMap' => [
        'sitemap' => [
            'class' => 'assayerpro\sitemap\console\CreateController',
        ],
    ],

为 urlManager 添加 baseUrl

     'urlManager' => [
         'baseUrl' => '',
         'hostInfo' => 'http://example.com/',
     ],

从控制台运行命令

$ ./yii sitemap/create

资源