prokhonenkov / yii2-sitemap-generator
网站地图生成器
1.3
2019-09-25 05:54 UTC
Requires
- php: >=7.1
- samdark/sitemap: ^2.2
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-25 16:55:20 UTC
README
此扩展生成sitemap.xml文件。该扩展使用https://github.com/samdark/sitemap。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require prokhonenkov/yii2-sitemap-generator
或者
"prokhonenkov/yii2-sitemap-generator": "*"
将以下内容添加到您的composer.json
文件的require部分。
配置
将组件声明添加到您的web配置文件中
<?php return [ // ... your config 'components' => [ 'sitemap' => [ 'class' => \prokhonenkov\sitemapgenerator\SitemapGenerator::class, // The class which implements SitemapSourceInterface, SitemapItemInterface 'baseUrl' => 'https://sitename.com', 'sitemapPath' => '@webroot', 'models' => [ \app\models\PostsSitemap::class, \app\models\ProductsSitemap::class, ], 'languages' => [ 'ru-RU', 'en-US', 'kk-KZ', ], ] ] ];
您需要创建两个类。第一个类应该实现SitemapSourceInterface和SitemapItemInterface,第二个类应该实现SitemapItemInterface
<?php use app\modules\posts\models\Posts; use prokhonenkov\sitemapgenerator\interfaces\SitemapItemInterface; use prokhonenkov\sitemapgenerator\interfaces\SitemapSourceInterface; use samdark\sitemap\Sitemap; use yii\helpers\ArrayHelper; use yii\helpers\Url; class PostsSitemap extends Posts implements SitemapSourceInterface, SitemapItemInterface { public function getSitemapItems(): array { return ArrayHelper::merge([new PostsSitemapItem()], self::find()->all()); } public function getSitemapName(): string { return 'posts'; } public function getLastModified(): int { return strtotime($this->updated_at); } public function getLocation($index = null): string { return Url::to(['/posts/view', 'id' => $this->id], true); } public function getChangeFrequency(): string { return Sitemap::MONTHLY; } public function getPriority(): string { return 0.5; } }
<?php use app\modules\posts\models\Posts; use prokhonenkov\sitemapgenerator\interfaces\SitemapItemInterface; use samdark\sitemap\Sitemap; use yii\helpers\Url; class PostsSitemapItem extends Posts implements SitemapItemInterface { public function getLastModified(): int { return strtotime( Posts::find() ->max('updated_at')); } public function getLocation($language = null): string { \Yii::$app->language = $language; return Url::to(['/posts/index'], true); } public function getPriority(): string { return 1; } public function getChangeFrequency(): string { return Sitemap::DAILY; } }
用法
将此代码放入ActiveRecord模型中的afterSave方法
public function afterSave($insert, $changedAttributes) { parent::afterSave($insert, $changedAttributes); \Yii::$app->sitemap->generate(); }
最终将创建文件结构