Турбо-страницы Яндекс — 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 за помощь!

Похожие статьи

  • Письмо от яндекс вебмастер
    Тестирую альфа версию, вот сегодня яндекс вебмастер прислал письмо, в котором жалуется на нечитаемый или слабо видимый текст, надо наверное что то с этим сделать. Вот содержание: Здравствуйте, Rea Yuran! Во время...
  • RSS
    Я так и не понял как работает RSS в LS и ALTO Интересует как ее настроить. количество сообщений которые попадают в ленту, их «возраст». то есть за какой период, и самое интересное как вывести в RSS то, что попадает...
  • Не работает rss
    Возможно кто либо сталкивался с такой проблемой http://lightlumen.ru/rss Кажется не подгружаются стили, где править?

10 комментариев

0
Есть плагин Универсальные RSS фиды RSS фиды только я не курсе работает он или нет.
0
Шаблон то не проблема, проблема в другом.
Когда я сменил это на это , то все норм, но когда я вставил после это: <turbo:content>, выдало ошибку.
Шаблон для смены тут: common/templates/skin/название шаблона/tpls/action/rss
+1
Есть кто тут кто может показать, куда лезть с исправлениями?
0
<?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">
			<turbo:content>
                <title>{$oRssItem->getTitle()|escape:'html'}</title>
                <guid isPermaLink="true">{$oRssItem->getGuid()}</guid>
                <link>{$oRssItem->getLink()}</link>
                <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>
+1
Не работает. На тег <turbo:content> ругается.
This page contains the following errors:
error on line 12 at column 18: Namespace prefix turbo on content is not defined
Below is a rendering of the page up to the first error.
Может где то не в шаблоне менять?
0
https://сайт.ru/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 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">
+1
Круто. Спасибо.
0
Если Яндекс.Турбо съесть это (на проверке), то можно будет считать рабочим вариантом :-)
+1
одно изменение. И яндекс съел:
 <item turbo="true">
			 <title>{$oRssItem->getTitle()|escape:'html'}</title>
			 <link>{$oRssItem->getLink()}</link>
			<turbo:content>
			<guid isPermaLink="true">{$oRssItem->getGuid()}</guid>
			<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>



Т,Е, между
<item turbo="true"> и </turbo:content>
нужно ставить титл и линк.
Отредактирован:
+1
В каком файле и как формируется лента?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.