Настройка турбо-страниц Яндекса

Как подключить турбо-страницы Яндекс к CMS Битрикс

В стандартном пакете Битрикса есть комплексный компонент "Новости" (bitrix:news), в который встроен компонент bitrix:rss.out, отвечающий за создание RSS фида. В настройках компонента RSS можно выставить параметр для создания ленты с разметкой для "Яндекс Новостей", но разметка для турбо-страниц на данный момент в ней отсутствует.

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

Подключаем турбо-страницы к Новостям Битрикса

  1. Создаем новый раздел на сайте, например, yandex-turbo. В этом разделе будет создан файл index.php и откроется в визуальном редакторе, удалите лишний текст из этого файла и вставьте в него компонент из правой колонки: "Контент -> RSS -> RSS новости (экспорт)".
  2. Теперь ваша страница с RSS лентой доступна по адресу: ваш-сайт.ru/yandex-turbo/
    Возможно у вас выйдет ошибка, например "Информационный блок не найден" или другая. В любом случае лучше проверить настройки подключения.
    Для этого откройте файловый менеджер, в корне сайта найдите папку yandex-turbo (или ваше название/путь к ней), в ней откройте (редактировать как php) тот самый файл index.php.
    Скорее всего внутри файла будет что-то наподобие этого:

    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle("Новый раздел");
    ?><?$APPLICATION->IncludeComponent(
    	"bitrix:rss.out",
    	".default",
    Array(),
    false
    );?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
    ?>
    

    Но нам нужно выставить параметры для подключения компонента к инфоблоку + сделать вывод на пустой странице, без какого-либо дизайна. Примерно таким будет ваш код:

    <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");?>
    <?$APPLICATION->IncludeComponent(
     "bitrix:rss.out",
     ".default",
     Array(
      "IBLOCK_TYPE" => "news",
      "IBLOCK_ID" => "1",
      "SECTION_ID" => "",
      "SECTION_CODE" => "",
      "NUM_NEWS" => "20",
      "NUM_DAYS" => "30",
      "RSS_TTL" => "60",
      "YANDEX" => "Y",
      "SORT_BY1" => "ACTIVE_FROM",
      "SORT_ORDER1" => "DESC",
      "SORT_BY2" => "SORT",
      "SORT_ORDER2" => "ASC",
      "FILTER_NAME" => "",
      "CACHE_TYPE" => "A",
      "CACHE_TIME" => "3600",
      "CACHE_NOTES" => "",
      "CACHE_FILTER" => "N",
      "CACHE_GROUPS" => "Y"
     ),
    false
    );?>
    <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?>
    

    Важные для нас строки:

    • ".default", // Указываем шаблон компонента, но если вы скопировали компонент и шаблон компонента (рекомендую скопировать) в своё пространство имён, то может отличаться.
    • "IBLOCK_TYPE" => "news", // Здесь указываем код инфоблока (посмотреть можно в админке, идем по пути: Контент -> Инфоблоки -> Типы инфоблоков -> Новости -> Ваш Инфоблок).
    • "IBLOCK_ID" => "1", // Указываем ID инфоблока, смотрим там же.

    Сохраняем файл, после этого у вас уже должен появится стандартный RSS фид с синтаксисом пригодным для сервиса "Яндекс Новости".

  3. Третьим шагом мы поправим баг парсера компонента rss.out.php. Для этого перейдите в файловый менеджер и найдите файл: bitrix -> components -> bitrix -> rss.out -> component.php
    Откройте его (редактировать как php), найдите строку 325:

    $arItem["full-text"] = htmlspecialcharsbx(htmlspecialcharsback($arElement["DETAIL_TEXT"]));
    

    Поменяйте ее на строку:

    $arItem["full-text"] = /*htmlspecialcharsbx(*/htmlspecialcharsback($arElement["DETAIL_TEXT"])/*)*/;
    

    Это не совсем баг, но данное экранирование символов преобразует все html теги в спец-символы, а нам нужен полноценный вывод разметки в новости. Сохраните файл.

  4. Осталось поправить шаблон rss, который формирует структуру xml файла.
    Если вы скопировали шаблон компонента в вашу тему, то файл по пути: bitrix -> templates -> ваша-тема -> components -> bitrix -> rss.out -> .default -> template.php
    Если вы хотите отредактировать шаблон rss.out.php в ядре битрикса, то путь другой: bitrix -> components -> bitrix -> rss.out -> templates -> .default -> template.php

    Редактируем template.php

    • В элемент <rss version="2.0"> нужно добавить строчку xmlns:turbo="http://turbo.yandex.ru&quot;
    • В элемент <item> добавить turbo="true"
    • Внутрь получившегося элемента <item turbo="true"> нужно добавить
      <turbo:content>
      	<![CDATA[
      		<figure>
      			<img src="<?=$arItem["enclosure"]["url"]?>" />
      		</figure>
      		<?
      			$yandexText = $arItem["full-text"];
      			$yandexText = preg_replace('/(<img.+?>)/iu','<figure>$1</figure>', $yandexText );
      			echo $yandexText;
      		?>
      	]]>
      </turbo:content>
      

Турбо-страницы готовы к валидации

Вот и все, ваша ссылка ваш-сайт.ru/yandex-turbo/ готова для прохождения валидации в веб-мастере Яндекса. Способ конечно не самый красивый, но на данный момент других решений не нашел, старался изложить максимально подробно, возможно что-то упустил, пишите в комментариях!

описание
Нажмите для звонка
Ваш заказ готов к оформлению
Бесплатная доставка по РоссииБесплатная доставка по России
Инструкции по установкеИнструкции по установке включены
Помощь в настройкеПомощь в настройке техники
Гарантия 3 годаДополнительная гарантия на 3 года
КешбекКешбек до 20% на бонусную карту
Возврат и обменВозврат и обмен без чека
Гарантированный подарок каждому, кто оформит заказ на сумму более 500 рублей!
+7 965 342-61-46
Консультации по решению