Генератор XML Sitemap для Yii2

Генератор XML Sitemap для Yii2

Рано и поздно публичный web сайт необходимо подстраивать для роботов поисковых систем для ускорения индексации поисковой выдачи в результате чего получать посетителей из поискового трафика. Фреймворк Yii2 из коробки не имеет встроенного готового расширения т.к. необходимо знать структуру предоставляемых разделов публичной части которые должны отображаться в файле sitemap.xml и остальные задачи исполняемого генератора.

В данном примере опишу самый простой пример генератора файла xml для статичной информационной части сайта и динамически изменяющихся страниц, состоящий из исполняемого контроллера и файла просмотра.

Controller

Поскольку пример показан в Фреймворк Yii2 Advanced необходимо учитывать пространства имен системы.

Создадим файл SitemapController.php в папке frontend\controllers

<?php
namespace frontend\controllers;

use Yii;
use yii\web\Controller;
use yii\web\Response;
use common\models\Blog; // модель хранящая динамический контент

class SitemapController extends Controller {

}

Расширим наш контроллер действием index:

public function actionIndex() {

    $arr = array();

    $posts = Blog::find()->where(['status_id' => 1])->all(); // Опрашиваем модель Blog все ее записи со статусом 1 (включено)

    foreach ($posts as $post) {
        $arr[] = array(
            'loc' => '/' . $post->seo_url, // Ссылка
            'lastmod' => date(DATE_W3C, $post->updated_at), // Дата
            'priority' => '0.50', // Приоритет
        );
    }

    // Отправляем данные на отображение без шаблона
    $xml_array = $this->renderPartial('index', array(
        'host' => Yii::$app->request->hostInfo, // Имя хоста
        'urls' => $arr, // Полученный массив
    ));

    Yii::$app->response->format = Response::FORMAT_RAW;
    $headers = Yii::$app->response->headers;
    $headers->add('Content-Type', 'text/xml'); // Устанавливаем заголовок страницы

    return $xml_array;
}

Для небольшого Web сайта этой функциональности вполне достаточно но если на сайт будет часто добавляться новый контент необходимо снизить нагрузку по запросам в базу данных. Для этого нужно  кешировать запросы.

View

Далее необходимо создать файл view.php в папке frontend\views\sitemap

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

    <url>
        <loc><?= $host . '/'; ?></loc>
        <lastmod><?= date(DATE_W3C); ?></lastmod>
        <priority>1.00</priority>
    </url>
    <?php foreach ($urls as $url) { ?>
        <url>
            <loc><?= $host . $url['loc']; ?></loc>
            <?php if (isset($url['lastmod'])) { ?>
                <lastmod><?= $url['lastmod']; ?></lastmod>
            <?php } ?>
            <priority><?= $url['priority']; ?></priority>
        </url>
    <?php } ?>
</urlset>

После можно попробовать вывести ваш xml файл на экран сслыкой http://ваш-сайт/index.php?r=sitemap/index

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<url>
		<loc>http://ваш-сайт/</loc>
		<lastmod>2020-09-29T16:40:57+03:00</lastmod>
		<priority>1.00</priority>
	</url>
	<url>
		<loc>http://ваш-сайт/post_1</loc>
		<lastmod>2020-09-29T17:06:39+03:00</lastmod>
		<priority>0.50</priority>
	</url>
	<url>
		<loc>http://ваш-сайт/post_2</loc>
		<lastmod>2020-09-29T22:23:15+03:00</lastmod>
		<priority>0.50</priority>
	</url>
</urlset>

 


Комментарии (0)

    Нет комментариев.
    Чтобы оставить свой комментарий, Вам необходимо авторизоваться. У Вас нет аккаунта? Пожалуйста, пройдите процедуру регистрации.