MODX. Создание RSS ленты

RSS — это тип фида, выводящий последние опубликованные записи в формате xml. Его можно использовать для создания виджитов на сторонних сайтах, оформления подписок через специальные приложения и т.п. 

Для создания RSS ленты на сайте, создайте новый ресурс, установите ему пустой шаблон, в настройках, в поле Тип контента (Content Type) поставьте RSS, также уберите отображение ресурса в меню и использование виз редактора.

В теле документа вставьте аналогичный вызов pdoResources, с нужными вам параметрами:

<?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>[[*longtitle]]</title>
    <link>[[*uri]]</link>
    <description>[[*introtext:cdata]]</description>
    <language>[[++cultureKey]]</language>
    <ttl>120</ttl>
    <atom:link href="[[*uri]]" rel="self" type="application/rss+xml" />
    [[!pdoResources?
      &tpl=`tpl.rssItem`
      &parents=`15`
      &depth=`5`
      &limit=`6`
      &sortby=`createdon`
      &includeContent=`1`
      &includeTVs=`1`
      &showHidden=`1`
      &hideContainers=`1`
    ]]
</channel>
</rss>

Примерный код для чанка tpl.rssItem

<item>
<title>[[+pagetitle:cdata]]</title>
<link>[[++site_url]][[+uri]]</link>
<description>
[[+introtext:cdata]]
</description>
<pubDate>[[+publishedon:strtotime:date=`%a, %d %b %Y %R:%S`]] +0400</pubDate>
<guid isPermaLink="false">[[++site_url]][[+uri]]</guid>
<dc:creator>
[[+createdby:userinfo=`username`]]
</dc:creator>
</item>

Для нормальной работы ленты необходимо, чтобы все ссылки на сайты и изображения были абсолютными — иначе RSS ридер не сможет их нормально отобразить.

Чтобы сообщить браузерам посетителей о наличии на сайте RSS ленты, вставьте следующий код в блок head:

<link rel="alternate" type="application/rss+xml" title="RSS-лента [[++site_name]]" href="[[~ID ресурса]]">

Преобразование RSS в html

Для вывода данных из RSS ленты на стороннем сайте можно использовать следующий код:

<?php

// указываем адрес фида

$url="https://site.ru/feed.rss";

// Временный файл нужен если на сайте несколько блоков с выводом данных из rss. 
// В данном примере путь к нему указывается в настройках системы.
// Парсинг ленты и запись в файл можно вынести в отдельный сниппет.

$tempfile= $modx->getOption('temp_file_path');
$temp = file_put_contents(MODX_BASE_PATH.$tempfile, file_get_contents("$url"));
$xml = simplexml_load_file(MODX_BASE_PATH.$tempfile);

// читаем полученный массив и выводим в виде html

foreach ($xml->xpath('//item') as $item)
{
    if (isset($item->enclosure)) {
        $img = $item->enclosure['url'];
    }

    $out .= '<div class="item"><a href="'.$item->guid.'"><img src="'.$img.'" alt="'.$item->title.'"><p>'.$item->title.'</p><p>'.$item->description.'</p></a></div>';
}

return $out;