
Создание турбо страниц RSS для Яндекса на MODX Revo
Основной материал взят отсюда, и немного скорректирован. Тут НЕ используются Tickets, JEVIX
Cоздание обычной RSS ленты, но по другому некоторые параметры вызова
Нам понадобится
- pdoResources
- Создать сниппет rssText
- Создать сниппет rssCDATA
1. Создания сниппета RSS-FEEDa для подготовки текста заголовка
Согласно документации описания элементов RSS 2.0 в использовании технологии «турбо-страниц», во всех элементах RSS-файла, кроме содержимого раздела , необходимо кодировать следующие символы: «&» (амперсанд) — «&», «<» (левая угловая скобка) — «<», «>» (правая угловая скобка) — «>», «»» (кавычки) — «"», «’» (апостроф) — «'». Предполагается, что ваш сервер отдает данные в кодировке «UTF-8».
На основание вышеизложенной информации создадим сниппет, который будет подготавливать содержимое для указанных элементов: «title», «description» и прочих.
Создавём сниппет с назовем «rssText»:
if(empty($cnt)) return ''; $output = str_replace( [ '&', '<', '>', '"', '\'' ], [ '&', '>', '<', '"', ''' ], html_entity_decode($cnt) ); return $output;Пояснение: использование функции html_entity_decode внутри кода обусловлено предположением, что заголовок, дескрипшен или же текст другого элемента могут содержать html-сущности, поэтому сначала происходит процесс декодирования и лишь потом, кодируется с учетом требований документации «Яндекса».
2. Сниппет подготовки текста содержимого
Как нам говорит документация по подготовке «турбо-страниц» — содержимое [CDATA[ ... ]] в кодировании не нуждается. Но все же, кое-какую подготовку провести нужно: вырезать якоря и якорные ссылки, которые служат для внутренней навигации по странице.
Создадим еще один сниппет назвав его «rssCDATA» и вставим в него следующий код:
if(empty($cnt)) return ''; $output = preg_replace( '/<a\s.*class="pseudo".*>(.+)<\/a>/U', '$1', $cnt ); $output = preg_replace( '/<a\s.*><\/a>/', '', $output ); return $output;Пояснение: ссылки на якоря страницы мы регламентируем наличием CSS-класса «pseudo», а в вашей же верстке скорее всего это определяется по-другому — выясните как и подставьте нужное регулярное выражение.
3. Создания шаблона для RSS-FEED
Приступим, для начала создадим шаблон, к примеру «RSS-FEED»
Добавим в него следующий код и подставим свои значения (в title, description, links):
<?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_url]][[~[[+id]]]]</title> <link>[[++site_url]]blog</link> <description>[[*description]]</description> <language>ru</language> [[!pdoResources? &tpl=`tpl_yandex_turbo_rss` &limit=`20` &depth=`1` &parents=`6,9,10,15` &includeContent=`1` &tvPrefix=`tv.` &includeTVs=`img_katalog` ]] </channel> </rss>
Где «&parents» ставим id тех ресурсов, которые будут попадать в нашу ленту.
4. Создания чанка для RSS-FEEDa
Шаблон создали, теперь создадим чанк «шаблон-одного элемента rss», назовём его «tpl_yandex_turbo_rss».
<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="[[++site_url]][[+tv.img_katalog]]"> </figure> <h1>{($longtitle ?: $pagetitle)}</h1> </header> {'!rssCDATA' | snippet : [ 'cnt' => ( $id | resource : 'content' | replace : '"assets/' : ('"' ~ $_modx->config.site_url ~ 'assets/') ) ]} ]]> </turbo:content> </item>
В «title» выкидываем заголовок статьи, в «link» полный адрес ссылки на ресурс.
Поле «description» не обязательно, но если нужно вывести часть контента, то потребуются компонент, который удалит html-теги. Это как раз созданные ранее сниппеты
5. Создание ресурса для RSS-FEEDa
И так, шаблон и чанк есть, теперь привяжем все это к нужному ресурсу.
Создаём ресурс, даём ему имя RSS-FEED, заходим во вкладку «Настройки» и меняем тип содержимого на XML.
Вкладка "Документ":
- Заголовок - RSS-FEED
- Шаблон - RSS-FEED
- Псевдоним - rss-feed
- Не показывать в меню - Да
- Опубликован - Да
Вкладка "Настройки":
- Тип содержимого - XML
- Доступен для поиска - Нет
- Использовать HTML редактор - Нет
- Заморозить URI - Да
- URI - rss-feed.xml
После этого лента будет по адресу http://вашсайт.ru/rss-feed.xml
Важно! Компоновка элементов панели создания ресурсов может немного отличатся от вашей, т.к. ее вид зависит от установленных в системе ModX Revolution дополнений, например таких, как «SEO Pro».С чем столкнулся при работе:
- 1. В элементе item отсутствует атрибут turbo со значением true (4 ошибки). Еще какието ошибки не помню уже и писать неохото (на скринах видно)
- 2. Не подгружались изображения на сайте первоисточнике по другому происходит вызов (применяются Tickets)
* Можно вместо шаблона создавать ресурс и в ресурсе указать "пустой шаблон"