Для формирования sitemap.xml на сайте рекомендованно использовать расширение: “himiklab/yii2-sitemap-module“: версии ~1.2.0.
Для настройки следует выполнить следующие шаги:
frontend/config/main.php
.А также настроить роутинг добавив пункт в секцию urlManager.rules.
'modules' => [
'sitemap' => [
'class' => 'himiklab\sitemap\Sitemap',
'cacheExpire' => 1,
],
]
['pattern' => 'sitemap', 'route' => 'sitemap/default/index', 'suffix' => '.xml'],
На примере модуля “Контент”.
'modules' => [
'sitemap' => [
'models' => [
'common\modules\content\models\Post',
],
],
]
Помимо этого в подключенные модели из предыдущего шага необходимо добавить поведение.
'sitemap' => [
'class' => SitemapBehavior::class,
'scope' => function ($model) {
/** @var PostQuery $model */
$model->select(['url', 'type_id', 'updated_at']);
$model->isPublished()->isActive();
},
'dataClosure' => function ($model) {
/** @var self $model */
return [
'loc' => $model->getFullUrl(),
'lastmod' => $model->updated_at,
'changefreq' => SitemapBehavior::CHANGEFREQ_DAILY,
'priority' => $model->sitemap ?: self::DEFAULT_SITEMAP
];
}
],
Не стоит забывать о том, что поле priority стоит хранить в базе данных, если необходима ручная настройка для каждой отдельно записи.
Пример миграции добавления поля для хранения priority:
/**
* {@inheritdoc}
*/
public function safeUp()
{
$this->addColumn('{{%content_post}}', 'sitemap', $this->decimal(2, 1)->notNull()->defaultValue(0.8)->after('active')->comment('Приоритет Sitemap'));
}
/**
* {@inheritdoc}
*/
public function safeDown()
{
$this->dropColumn('{{%content_post}}', 'sitemap');
}
<?= $form->field($model, 'priority')->textInput(); ?>
.Статичные ссылки можно добавлять как через конфигурацию приложения, если они глобальные и относятся к приложению, либо через конфигурацию отдельно взятого модуля, если ссылки локальны внутри модуля, но должны быть доступны в sitemap.xml.
'urls'=> [
// your additional urls
[
'loc' => '/news/index',
'changefreq' => \himiklab\sitemap\behaviors\SitemapBehavior::CHANGEFREQ_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',
],
],
],
],
Для того, чтобы мы смогли Вам предоставить доступ расскажите немного о себе
Опишите в форме ниже задачу, которую требуется реализовать.