Для формирования 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',],],],],
Для того, чтобы мы смогли Вам предоставить доступ расскажите немного о себе
Опишите в форме ниже задачу, которую требуется реализовать.