avatar
+0.52
0.206

Турбо-страницы Яндекс — RSS с турбо

У Яндекса есть так называемые «Турбо-страницы», которые добавляют информацию с RSS лент сайтов в Новости или Дзен. RSS вывод должен быть такого вида:
Пример RSS-канала
<rss
    xmlns:yandex="http://news.yandex.ru"
    xmlns:media="http://search.yahoo.com/mrss/"
    xmlns:turbo="http://turbo.yandex.ru"
    version="2.0"
>
    <channel>
        <item turbo="true">
            <link>http://www.example.com/page1.html</link>
           <turbo:content>
                <![CDATA[
                    <header>
                        <figure>
                            <img src="http://example.com/img.jpg" />
                        </figure>
                        <h1>Заголовок страницы</h1>
                    </header>
                    <h2>Заголовок страницы</h2>
                    <p>Текст с <b>выделением</b> и списком:</p>
                    <ul>
                        <li>пункт 1;</li>
                        <li>пункт 2.</li>
                    </ul>
                    <figure>
                        <img src="http://example.com/img-for-video.jpg" />
                        <figcaption>Подпись к картинке</figcaption>
                    </figure>
                    <iframe
                         width="560"
                         height="315"
                         src=
                          "https://www.youtube.com/embed/<уникальный набор символов>" 
                         frameborder="0" 
                         allowfullscreen
                    </iframe>
                ]]>
           </turbo:content>
        </item>
    </channel>
</rss>


Где можно подкоректировать вывод RSS под стандарт Яндекса?

В файл /common/classes/modules/rss/entity/Rss.entity.class.php нужно добавить к функции несколько строчек (которых у вас нет):
public function __construct() {

        $this->AddRssAttribute('xmlns:atom', 'http://www.w3.org/2005/Atom');
        $this->AddRssAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
	$this->AddRssAttribute('xmlns:content', 'http://purl.org/rss/1.0/modules/content/');
	$this->AddRssAttribute('xmlns:slash', 'http://purl.org/rss/1.0/modules/slash/');
	$this->AddRssAttribute('xmlns:wfw', 'http://wellformedweb.org/CommentAPI/');
	$this->AddRssAttribute('xmlns:sy', 'http://purl.org/rss/1.0/modules/syndication/');
	$this->AddRssAttribute('xmlns:georss', 'http://www.georss.org/georss');
	$this->AddRssAttribute('xmlns:turbo', 'http://turbo.yandex.ru');
    }


Результат шапки rss будет таким:
Выводит так
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:georss="http://www.georss.org/georss" xmlns:turbo="http://turbo.yandex.ru" version="2.0">

В файле common/templates/skin/название шаблона/tpls/action/rss/action.rss.index.tpl (или какой у вашего шаблона)нужно сделать так:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" {$oRss->getRssAttributesStr()}>
    {foreach $oRss->getChannels() as $oRssChannel}
    <channel>
        <title>{$oRssChannel->getTitle()}</title>
        <link>{$oRssChannel->getLink()}</link>
        <description><![CDATA[{$oRssChannel->getDescription()}]]></description>
        <language>{$oRssChannel->getLanguage()}</language>
        <managingEditor>{$oRssChannel->getManagingEditor()}</managingEditor>
        <webMaster>{$oRssChannel->getWebMaster()}</webMaster>
        <generator>{$oRssChannel->getGenerator()}</generator>
        {foreach $oRssChannel->getItems() as $oRssItem}
            <item turbo="true">
			    <title>{$oRssItem->getTitle()|escape:'html'}</title>
                <guid isPermaLink="true">{$oRssItem->getGuid()}</guid>
				<link>{$oRssItem->getLink()}</link>
				<turbo:content>
                <author>{$oRssItem->getAuthor()}</author>
                <description><![CDATA[{$oRssItem->getDescription()}]]></description>
                <pubDate>{$oRssItem->getPubDate()}</pubDate>
                {foreach $oRssItem->getCategories() as $sCategory}
                    <category>{$sCategory}</category>
                {/foreach}
            </turbo:content>
			</item>
        {/foreach}
    </channel>
    {/foreach}
</rss>


После этого добавляем в яедекс https://сайт.ru/rss и получаем зеленый свет окончания проверки «Без ошибок».

Спасибо DonDenchik за помощь!