Jump to main content Jump to doc navigation

Сайты, которые публикуют новые статьи, записи в блоге или новости, обычно хотят дать посетителям способ оставаться в курсе. RSS-ленты решают эту задачу просто. В этом кратком руководстве описано, как создать собственную RSS-ленту в MODX Revolution с дополнением getResources. Если вы ещё не установили getResources, сначала установите его.

Создание ресурса RSS

В менеджере MODX создайте новый ресурс.

  1. Задайте заголовок (например: «Мои последние записи в блоге на sitename.com») и псевдоним (например: feed).
  2. Измените шаблон на «(пустой)», то есть без шаблона. Появится диалог с вопросом, уверены ли вы. Нажмите «Да».
  3. Перейдите на вкладку «Настройки страницы» и найдите поле «Тип содержимого». Откройте его и установите значение RSS.
  4. Теперь можно добавить информацию о канале (глобальные сведения о ленте) в содержимое страницы. Если вы используете TinyMCE или другой визуальный редактор, отключите его на вкладке «Настройки страницы», чтобы редактор не испортил разметку.
  5. Вставьте следующий код в поле «Содержимое»:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>[[*pagetitle]]</title>
    <link>[[~[[*id]]? &scheme=`full`]]</link>
    <description>[[*introtext:cdata]]</description>
    <language>[[++cultureKey]]</language>
    <ttl>120</ttl>
    <atom:link href="[[~[[*id]]? &scheme=`full`]]" rel="self" type="application/rss+xml" />
[[getResources?
  &tpl=`rssItem`
  &parents=`29,41`
  &depth=`5`
  &limit=`10`
  &includeContent=`1`
  &includeTVs=`1`
  &showHidden=`0`
  &hideContainers=`1`
]]
</channel>
</rss>

Предупреждение для Articles Если вы используете getResources для вывода записей блога из дополнения Articles, установите &showHidden=1. Ресурсы Articles считаются скрытыми.

Логика простая. Сначала вы объявляете версии xml и rss (а также «расширения» rss, в данном случае atom и dublin core), аналогично объявлению HTML Doctype. Затем начинается блок channel, где вы указываете сведения о ленте и сайте, который она представляет.

  • Title: заголовок ленты, который отображается в заголовке браузера или RSS-ридере. Здесь используется pagetitle.
  • Link: полная (абсолютная) ссылка на RSS-ленту.
  • Description: краткое описание сайта для блока информации о ленте. Фильтр cdata оборачивает поле introtext в теги cdata, чтобы разметка не сломала ленту.
  • Language: двухсимвольный cultureKey, который можно задать для контекста и который указывает язык ленты.
  • Ttl: time to live, время в минутах, в течение которого ридер может кешировать ленту перед повторной загрузкой.
  • Atom link to self.

На этом информация о канале закончена. Далее идёт вызов getResources, который выбирает элементы на глубине до 5 уровней от родителей 29 и 41, не более 10 ресурсов. Также подключаются содержимое и все TV, связанные с ресурсом.

Сохраните ресурс.

Если вы откроете ленту сейчас, она ещё не будет работать корректно, потому что шаблон для элементов ленты ещё не создан.

Настройка tpl getResources для элементов

В вызове getResources мы ссылаемся на чанк «rssItem», поэтому создайте его.

<item>
  <title>[[+pagetitle:htmlent]]</title>
  <link>[[~[[+id]]? &scheme=`full`]]</link>
  <description>
    [[+introtext:default=`[[+content:ellipsis=`600`]]`:cdata]]
  </description>
  <pubDate>[[+publishedon:strtotime:date=`%a, %d %b %Y %H:%M:%S %z`]]</pubDate>
  <guid isPermaLink="false">[[~[[+id]]? &scheme=`full`]]</guid>
  <dc:creator>
      [[+createdby:userinfo=`fullname`]]
  </dc:creator>
</item>

Вы можете изменить этот чанк под свои задачи и добавить или убрать нужные поля. Этот шаблон элемента включает:

  • pagetitle ресурса (с htmlentities на всякий случай);
  • ссылку на ресурс;
  • описание: introtext, если оно заполнено, иначе первые 600 символов content (подробнее о выходных фильтрах). Снова применяется фильтр cdata, чтобы HTML-теги не сломали ленту;
  • дату публикации ресурса;
  • GUID / ссылку на ресурс;
  • имя автора (из поля createdby).

После сохранения чанка вернитесь к ленте: содержимое должно подгрузиться. Добавьте ссылку на RSS на сайте и в заголовке через тег link:

<link rel="alternate" type="application/rss+xml" title="Follow this website with RSS" href="[[~52]]" />

Замените 52 на ID вашего RSS-ресурса. Браузер распознает ленту и покажет иконку в панели навигации.

Что дальше

Вы можете доработать решение дальше. Несколько идей:

  • Если у автора нет отдельной учётной записи в менеджере MODX, создайте текстовую TV с его именем и используйте её вместо имени из поля createdby.
  • Сейчас лента забирает все ресурсы внутри родителей, включая категории, заглушки и другие страницы, которые вы не хотите показывать. Их можно отфильтровать через TV и параметр &tvFilter в вызове getResources.
  • Изучите спецификацию RSS и решите, какие ещё поля добавить в ленту.

Устранение неполадок

Лента ничего не показывает? Откройте исходный код страницы. Если содержимое есть, но не разбирается корректно, скорее всего, ошибка в синтаксисе. Проверьте ленту через W3C Feed Validator и исправьте ошибки.

Эта страница частично основана на сообщении Ryan Thrash на форуме.

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more