zhelyabuzhsky / yii2-sitemap
一个用于生成sitemap.xml的Yii2工具。
1.2.0
2019-02-21 04:15 UTC
Requires
- yiisoft/yii2: *
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2024-09-22 15:56:33 UTC
README
一个通过Yii2控制台命令生成大型网站sitemap文件的Yii2扩展
安装
安装此扩展的首选方式是通过 composer。
$ php composer.phar require zhelyabuzhsky/yii2-sitemap
或添加以下内容到你的 composer.json
文件的 require 部分。
"zhelyabuzhsky/yii2-sitemap": "^1.1"
特性
- 生成多个sitemap(大型网站)
- 创建索引sitemap文件
- 对.xml文件进行Gzip压缩
- 支持不允许的url(通过正则表达式数组)
配置
1. 在控制台配置中配置 urlManager
'urlManager' => [ 'hostInfo' => 'https://example.com', 'baseUrl' => '/', 'rules' => [ // ... ], ],
注意 对于Yii2控制台应用,需要同时配置 hostInfo
和 baseUrl
参数。
注意 通常,urlManager
的 rules
部分会重复你的前端 urlManager
配置,因此你可以在控制台配置中合并它们(参见 yiisoft/yii2#1578 (comment))
显示详细信息
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. 在控制台配置的 components 部分配置 Sitemap
组件
'components' => [ 'sitemap' => [ 'class' => '\zhelyabuzhsky\sitemap\components\Sitemap', ], ],
使用额外 Sitemap
参数的示例
'components' => [ 'sitemap' => [ 'class' => '\zhelyabuzhsky\sitemap\components\Sitemap', 'maxUrlsCountInFile' => 10000, 'sitemapDirectory' => 'frontend/web', 'optionalAttributes' => ['changefreq', 'lastmod', 'priority'], 'maxFileSize' => '10M', ], ],
其中
maxUrlsCountInFile
- 单个sitemap文件中url的最大数量;sitemapDirectory
- 放置sitemap文件的目录;optionalAttributes
- 使用可选属性列表;maxFileSize
- 最大文件大小。零表示无限制。因此,你可以指定以下缩写:k - 千字节和 m - 兆字节。默认为10m。
使用方法
1. 为你想要在sitemap中使用的模型实现 SitemapEntityInterface
显示示例
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 'https:///' . $this->slug; } /** * @inheritdoc */ public static function getSitemapDataSource() { return self::find(); } }
2. 创建用于控制台命令的Yii2 控制器
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. 运行控制台命令
php yii sitemap/create
测试
设置环境变量 SERVER_NAME(例如 https://example.com)
$ ./vendor/bin/phpunit
安全
如果你发现任何与安全相关的问题,请通过电子邮件 zhelyabuzhsky@icloud.com 联系我,而不是使用问题跟踪器。
致谢
许可证
GNU通用公共许可证,版本3。请参阅 许可证文件 以获取更多信息。