Настройка Турбо страниц для Яндекса (Готовое решение)
        Долго разбирался как настроить Турбо страницы для Яндекса. Много разного мануала нашел, в итоге решил поделиться тем, что у меня получилось. Не судите строго.
Может кто-то что-то подскажет, как реализовать проще или что-то улучшить. Может кому-то помогут мои наработки.
Рейтинга не хватило разместить в разделе Готовые решения или Пошаговые инструкции, оставляю в Вопросах.
1) Создаем Шаблон, я назвал его TurboYandex.
2) Код шаблона:
7) В коде шаблона:
8) В настройках web-мастера яндекса указываем ссылку на наш ресурс turborss.xml
Я делал это для статейного раздела на сайте. Вот как это выглядит в поиске:

Соответственно захламлять и ставить турбо страницы на все, я не советую, лучше вывести так горячие товары, новости, акции или услуги сайта, но это не точно)
Жду критики и конструктивных комментариев.
    
    
                                                        Может кто-то что-то подскажет, как реализовать проще или что-то улучшить. Может кому-то помогут мои наработки.
Рейтинга не хватило разместить в разделе Готовые решения или Пошаговые инструкции, оставляю в Вопросах.
1) Создаем Шаблон, я назвал его TurboYandex.
2) Код шаблона:
<!--?xml version="1.0" encoding="utf-8"?-->
<rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0">
<channel>
<title>[[++site_name]]</title>
<link>[[++site_url]]</link>
<description>[[*description]]</description>
<language>ru</language>
[[!pdoPage?
    &parents=`4`
    &tpl=`tpl.turborss`
    &tvPrefix=`tv.`
    &includeTVs=`cover,rubric`
]]
</channel>
</rss>3) Код чанка tpl.turborss<item turbo="true">
<link>{$_modx->config.site_url ~ $id | url}</link>
<title>{'!rssText' | snippet : [ 'cnt' => ( $longtitle ?: $pagetitle ) ]}</title>
<pubDate>{$publishedon | date : 'D, d M Y G:i:s +0300'}</pubDate>
<turbo:content>
<![CDATA[
<header>
<figure>
<img src="{$_modx->config.site_url ~ $id | resource : 'cover' | phpthumbon : 'w=640'}" />
</figure>
<h1>{($longtitle ?: $pagetitle)}</h1>
</header>
{'!rssCDATA' | snippet : [ 'cnt' => ( $id | resource : 'content' | replace : '"assets/' : ('"' ~ $_modx->config.site_url ~ 'assets/') ) ]}
]]>
</turbo:content>
</item>4) Код сниппета rssText:<?php
if(empty($cnt)) return '';
$output = str_replace( [ '&', '<', '>', '"', '\'' ], [ '&', '>', '<', '"', '\'' ], html_entity_decode($cnt) );
return $output;5) Код сниппета rssCDATA:<?php
if(empty($cnt)) return '';
$output = preg_replace( '/<a\s.*class="pseudo".*>(.+)<\/a>/U', '$1', $cnt );
$output = preg_replace( '/<a\s.*><\/a>/', '', $output );
return $output;6) Создаем ресурс, тип содержимого ему задаем XML и устанавливаем для него наш созданный шаблон TurboYandex. URL я задал для него turborss.xml и заморозил.7) В коде шаблона:
&parents=`4`
&tpl=`tpl.turborss`
&tvPrefix=`tv.`
&includeTVs=`cover,rubric`Задаем своего родителя, нужные TV и параметры. И соответственно их подправляем в чанке tpl.turborss8) В настройках web-мастера яндекса указываем ссылку на наш ресурс turborss.xml
Я делал это для статейного раздела на сайте. Вот как это выглядит в поиске:

Соответственно захламлять и ставить турбо страницы на все, я не советую, лучше вывести так горячие товары, новости, акции или услуги сайта, но это не точно)
Жду критики и конструктивных комментариев.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 21
                Спасибо, решение крутое.
Поблагодарил автора!!))
                    Поблагодарил автора!!))
                Спасибо)            
                    
                В данном случае нет нужды использовать pdoPage — у Вас же нет пагинации.
Делайте через кешируемый pdoResources и добавьте &limit, а то по умолчанию у Вас 10 ресурсов только выведется.
И коль уж Вы используете для картинки вывод через resource:
                    Делайте через кешируемый pdoResources и добавьте &limit, а то по умолчанию у Вас 10 ресурсов только выведется.
И коль уж Вы используете для картинки вывод через resource:
<img src="{$_modx->config.site_url ~ $id | resource : 'cover' | phpthumbon : 'w=640'}" />..., а TV rubric не используете вовсе, уберите из вызова includeTVs — в этом смысла нет (только увеличивает нагрузку)....
[[pdoResources?
    &parents=`4`
    &tpl=`tpl.turborss`
    &limit=`0`
]]
...            
                Спасибо за замечание. Поправлю на сайте.            
                    
                Обрезает тег /link и автоматически комментирует <![CDATA[, что делать?            
                    
                Спасибо за решение, всё работает. Настроил под себя.
Один вопрос возник у меня: как реализовать похожие записи в tpl.turborss. pdoNeighbors не получилось заставить работать. Есть ли какие нибудь решения тут? получается pdoNeighbors мы запускаем внутри pdoResources.
                    Один вопрос возник у меня: как реализовать похожие записи в tpl.turborss. pdoNeighbors не получилось заставить работать. Есть ли какие нибудь решения тут? получается pdoNeighbors мы запускаем внутри pdoResources.
                Ну сниппет pdoNeighbors должен работать внутри чанка tpl.turborss. Вопрос только в том, что возможно не проходит сама валидность кода для Турбо Яндекса.
Покажите как выыводите.
                    Покажите как выыводите.
                из доки надо делать так: yandex.ru/dev/turbo/doc/rss/elements/read-also-docpage/
                    {'pdoNeighbors' | snippet : [
				'limit' => '3',
				'tvPrefix' => '',
				'includeTVs' => 'pro,image1',
				'tplWrapper' => '@INLINE {$prev}{$next}',
				'tplPrev' => '@FILE elements/chunks/card.tpl',
				'tplNext' => '@FILE elements/chunks/card.tpl',
				]}card.tpl<div data-block="feed-item"
         data-title="{$pagetitle}"
         data-href="{$uri}"
         data-thumb="{$_modx->config.site_url ~ $id | resource : 'image1'}"
         data-thumb-position="top"
         data-thumb-ratio="16x10">
    </div>            
                а весь код чанка tpl.turborss?            
                    
                весь остальной код работает нормально. Тут только в этом проблема. Он не выводит картинку. и очень странно берёт соседей, не от своего родителя, а выше.            
                    
                Попробуйте так:
 
 
card.tpl
 
И еще важно:
                    {'pdoNeighbors' | snippet : [
                                'id' => $id,
				'limit' => '3',
				'tvPrefix' => '',
				'includeTVs' => 'pro,image1',
				'tplWrapper' => '@INLINE {$prev}{$next}',
				'tplPrev' => '@FILE elements/chunks/card.tpl',
				'tplNext' => '@FILE elements/chunks/card.tpl',
				]} card.tpl
<div data-block="feed-item"
         data-title="{$pagetitle}"
         data-href="{$uri}"
         data-thumb="{$image1}"
         data-thumb-position="top"
         data-thumb-ratio="16x10">
    </div>И еще важно:
Корневой div data-block=«feed» должен содержать хотя бы один вложенный div data-block=«feed-item».
                Да, спасибо помогло. Финальный вариант выглядит так: 
                    <div data-block="feed" data-layout="horizontal" data-title="Похожие">
            {'pdoNeighbors' | snippet : [
            'id' => $id,
            'limit' => '3',
            'tvPrefix' => '',
            'includeTVs' => 'image1',
            'tplWrapper' => '@INLINE {$prev}{$next}',
            'tplPrev' => '@FILE elements/chunks/turbocard.tpl',
            'tplNext' => '@FILE elements/chunks/turbocard.tpl',
            ]}
        </div>turbocard.tpl<div data-block="feed-item"
     data-title="{$pagetitle}"
     data-href="{$_modx->config.site_url ~ $id | url}"
     data-thumb="{$_modx->config.site_url ~ $id | resource : 'image1'}"
     data-thumb-position="top"
     data-thumb-ratio="16x10">
</div>            
                " {'pdoNeighbors' | snippet: [
'id' => $id,
'limit' => '3',
'tvPrefix' => '',
'includeTVs' => 'image1',
'tplWrapper' => '@INLINE {$prev}{$next}',
'tplPrev' => '@FILE elements/chunks/turbocard.tpl',
'tplNext' => '@FILE elements/chunks/turbocard.tpl',
]}
"
Подскажите пожалуйста этот код нужно добавлять в Сниппет: pdoNeighbors или в шаблон?
                    'id' => $id,
'limit' => '3',
'tvPrefix' => '',
'includeTVs' => 'image1',
'tplWrapper' => '@INLINE {$prev}{$next}',
'tplPrev' => '@FILE elements/chunks/turbocard.tpl',
'tplNext' => '@FILE elements/chunks/turbocard.tpl',
]}
"
Подскажите пожалуйста этот код нужно добавлять в Сниппет: pdoNeighbors или в шаблон?
                Настроил согласно этой инструкции, но появился вопрос.
В текст статьи по этому коду:

Подскажите, что я сделал не так )
                    В текст статьи по этому коду:
{'!rssCDATA' | snippet : [ 'cnt' => ( $id | resource : 'content' | replace : '"assets/' : ('"' ~ $_modx->config.site_url ~ 'assets/') ) ]}уходит экранированный текст, где все тэги «побиты»<p><img src="/img/lys.jpg" width="300" alt="Монтаж люстры" align="right"   vspace="0" hspace="5">
<p>Теперь Вам достаточно просто обратиться в нашу компанию. Больше нет необходимости в поиске электрика, наши специалисты сделают это для Вас.</p>
<h2>Монтаж люстры</h2>
<p>Все <b> люстры </b> крепятся практически одинаково, приведем три примера.</p>
Подскажите, что я сделал не так )
                Решил созданием сниппета GetPageContent с кодом
                    <?php
$resource = $modx->getObject("modResource", array("id" => "$input"));
return $resource->get("content");и вызовом [[!GetPageContent? &input={$id}]]            
                Яндекс ругается, что не генерирует главную страницу…
При добавлении её в resources — генерирует только ее...(
Что может быть?
                    При добавлении её в resources — генерирует только ее...(
Что может быть?
                пробовал не выводит что не так делаю подскажите            
                    
                Покажите как вы выводите данные.            
                    
                каким образом 6 раз пытаюсь сделать видно этапы не понимаю            
                    
                Напишите в личку, контакты тут @Андрей Шевяков помогу разобраться.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    
            
            
                    
                    
                