MODX. Создание RSS ленты
Отредактировано: 27 Августа 2018
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;
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.