MODX. Пример создания rss в MODX, с подключением турбо-страниц Яндекса

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

Инструкция Яндекса по созданию турбо-страниц

Инструкция по созданию rss ленты для вывода турбо-страниц Яндекса в cmf Modx

  1. Создаём новый ресурс с подходящим названием, к примеру rss;
  2. Устанавливаем «пустой шаблон»;
  3. Ставим галочки «Скрыть из меню» и «Опубликован», указываем описание в поле description, к примеру — «Rss канал сайта [[++site_name]]»;
  4. На вкладке «Настройки» выбираем «Тип содержимого» — RSS;
  5. На вкладке «Настройки» отключаем использование HTML-редактора;
  6. В содержимое ресурса вставляем следующий код:
    <?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>
            [[!pdoResources?			
                &tpl=`tpl.rss`			
                &parents=`0`			
                &depth=`5`	
                &limit=`300`		
                &includeContent=`1` 
            ]]  
        </channel>
    </rss>

    В вызове pdoResources указываем настройки подходящие для сайта на котором делается rss лента. Все аналогично настройке этого компонента на других страницах. Если у вас на сайте нет pdoResources можно также использовать getResources, это не критично. Обратите внимание, что в вызове сниппета указан лимит. Если его не указать, при слишком большом количестве файлов, система не сможет их обработать и будет показывать стандартный вывод элементов.

  7. Создаем чанк с шаблоном для элементов rss ленты, в моем случае tpl.rss:

            <item turbo="true">
                <link>[[++site_url]][[+uri]] </link>
                <pubDate>[[+publishedon:date=`%a, %d %b %Y %H:%M:%S +0300`]]</pubDate>
                <turbo:content>
                    <![CDATA[ 
                       <header>
                           <h1>[[+pagetitle:replace=`&nbsp;== `]]</h1>
                       </header>
                       
                       [[+content:replace=`&nbsp;== `]]
                       
                    ]]>
                </turbo:content>
            </item>
  8. Просматриваем получившуюся страницу. При заходе по нужному адресу браузер предложит скачать файл, скачивайте и просматривайте через текстовый редактор, либо откройте нужный адрес с префиксом view-source:

    view-source:https://www.site.ru/rss.rss
  9. Открываем Яндекс вебмастер, в разделе «Турбо-страницы» → «Источники» вставляем ссылку, проверяем валидатором и нажимаем добавить. Яндекс проверит файл, и в случае если ошибок нет выведет статус «Без ошибок». Если же он не понимает файл должным образом, выдаст комментарии, которые помогут исправить ошибку;
  10. Теперь надо привязать турбо-страницы к счетчикам. Счетчики Яндекс Метрики подтягиваются автоматически, но счетчики других систем надо добавить вручную. Идем в раздел в разделе Турбо-страницы → Общие настройки → Веб-аналитика. Копируем недостающие номера счетчиков и добавляем в соответствующие поля.

Так настраивается простейший вывод турбо страниц, но в большинстве случаев вам понадобиться вывод дополнительных полей. И в этом случае бывает удобно использовать шаблонизатор fenom. К примеру, добавим в турбостраницы вывод заглавного изображения:

{if $id | resource : 'image' != ''}
    <figure>
        <img src="{$_modx->config.site_url ~ $id | resource : 'image' | phpthumbon : 'w=640'}" />
    </figure>
{/if}

Тут стоит немного пояснить ситуацию — если выводить поле с изображением не через id ресурса, то надо подключать вывод необходимого поля в вызове сниппета pdoResources. Но при подобной записи этого делать не обязательно.

Блок с хлебными крошками можно вывести так:

{set $parentIDs = $_modx->getParentIds($id) | reverse}
<div data-block="breadcrumblist">
     {foreach $parentIDs as $parentId first=$first}
          {if $first} 
              <a href="{$_modx->config.site_url}">{1 | resource : 'pagetitle'}</a>
          {else}
              <a href="{$_modx->config.site_url ~ $parentId | resource : 'uri'}">{$parentId | resource : 'pagetitle'}</a>
          {/if}
     {/foreach}
</div>

Собираем id всех родителей, переворачиваем получившийся массив, и в первой строке получившегося массива проставляем параметры главной страницы нужного сайта. При необходимости единицу надо заменить на соответствующий id главной страницы.

Полный код шаблона элемента для турбо-страниц Яндекса, оформленный под Modx

        <item turbo="true">
            <link>[[++site_url]]{$_modx->makeUrl($id)} </link>
            <pubDate>[[+publishedon:date=`%a, %d %b %Y %H:%M:%S +0300`]]</pubDate>
            <turbo:content>
                <![CDATA[ 
                   <header>
                       <h1>[[+pagetitle:replace=`&nbsp;== `]]</h1>
                       {if $id | resource : 'image' != ''}
                          <figure>
                             <img src="{$_modx->config.site_url ~ $id | resource : 'image' | phpthumbon : 'w=640'}" />
                          </figure>
                       {/if}
                       {set $parentIDs = $_modx->getParentIds($id) | reverse}
                       <div data-block="breadcrumblist">
                           {foreach $parentIDs as $parentId first=$first}
                               {if $first} 
                                   <a href="{$_modx->config.site_url}">{1 | resource : 'pagetitle'}</a>
                               {else}
                                   <a href="{$_modx->config.site_url ~ $parentId | resource : 'uri'}">{$parentId | resource : 'pagetitle'}</a>
                               {/if}
                           {/foreach}
                       </div>
                   </header>
                   
                   [[+content:replace=`&nbsp;== `]]
                   
                ]]>
            </turbo:content>
        </item>