Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Создание собственной новостной ленты


Создание ленты новостей нашего сайта в формате RSS мы уже описывали ранее. Теперь мы столкнулись с форматом Atom. С чтением лент формата Atom мы разобрались. А как же генерировать такую ленту с новостями нашего сайта?

 

Напомним, что для трансляции RSS-ленты мы использовали вызов Ditto:

[ !Ditto? &startID=`1498` &format=`rss` &tpl=`ditto_rss_tpl`! ]

Здесь в качестве параметров задавался format ленты rss и чанк для формирования вывода ditto_rss_tpl.

Для вывода ленты в формате Atom можно также сделать вызов Ditto:

[ !Ditto? &startID=`1498` &format=`atom` &tpl=`ditto_atom_tpl`! ]

Здесь в качестве параметров задаем format ленты atom и чанк для формирования вывода ditto_atom_tpl.

Собственно все секреты вывода ленты в формате Atom заключаются в правильном написании чанка  ditto_atom_tpl.

Сравним чанки 

ditto_rss_tpl
ditto_atom_tpl

<item>

<title>

 [ +rss_pagetitle+ ]

 </title>

<link>

  [ (site_url) ] [ ~ [ + id + ] ~ ]

</link>

 <description>

 <![CDATA

[ [ +longtitle+ ] ]

]>

</description>

<pubDate>

[ +rss_date+ ]

</pubDate>

<guid isPermaLink="false">

[ (site_url)] [ ~  [ + id + ] ~ ]

</guid>

<dc:creator>

[ +rss_author+ ]

</dc:creator>

[ +tagLinks+ ]

</item>

<entry>

 <title>

  [ +atom_escaped_pagetitle+ ]

  </title>

<link rel="alternate"

  type="text/html"

  href="[ (site_url) ] [ ~ [ + id + ] ~ ]"

 />

 <author>

  <name>

  [ +atom_author+ ]

 </name>

 </author>

 <id>[ + url +] </id>

 <summary>

 <![CDATA

  [ [ +longtitle+ ] ]

  ]>

 </summary>

 <updated>

  [ +atom_editedon+ ]

 </updated>

 <published>

 [ +atom_createdon+ ]

 </published>

</entry>

 Напоминаем, эти чанки формируют вывод одной новости. Различия выделены жирным шрифтом. Перенос по строкам сделан для облегчения понимания.

Как видим, различия весьма существенные. Вместо элемента item в RSS для Atom используется элемент entry, ссылка на полную новость в RSS сделана в виде текста элемента, а в Atom - в виде атрибута и так далее.

Особое различие имеется в плейсхолдерах  rss_pagetitle и atom_escaped_pagetitle, rss_date и atom_editedon.

Критиковать или хвалить форматы мы не будем - просто принимаем различия как фактор, который надо учитывать. Заметим, что добиться правильного отображения формата Atom удалось не сразу. Надо не только получить правильную на вид ленту, но и добиться, чтобы она была синтаксически правильной. Делать это можно с помощью сервиса

FEED Validator

Обложка книги

Введя адрес своей ленты, её можно проверить. Сначала могут быть и ошибки:

Feed Validator

После ряда корректировок добиваемся отсутствия ошибок (да и то с рекомендациями):

Feeв Мфдшвфещк

Но результаты получаются такие:

Лента нашего сайта в формате RSS:

  Лента сайта в формате RSS

Лента нашего сайта в формате Atom:

Лента сайта в формате Atom

Оба примера отображают ленту напрямую, в браузере Firefox. Обе ленты, как и положено, выглядят одинаково, независимо от используемого формата.

Если же встроить ссылки на ленты в страницы сайта, работающем под управлением MODx, то они будут выглядеть, конечно иначе. Например, лента нашего сайта, встроенная в сам сайт, выглядит так:

Лента сайта

А как мы узнали  о существовании параметра format=atom, о плейсхолдерах с префиксом atom_ и о именах элементов? Об параметре atom есть упоминание в документации на Ditto, а вот плейсхолдеры и префиксы пришлось разыскивать в assets/snippets/ditto/formats/atom.format.inc.php.

Там же нашелся и образец чанка новости для Atom.

 

Итоги:

Мы умеем теперь выдавать ленту сайта и в формате RSS, и в формате Atom. Хотя нам кажется формат RSS более распространенным, сделаем-ка мы для сайта кнопки и RSS, и Atom. "Шоб как у людей". Подмигнуть

 

 

08-09-2009 10:28:13



    Содержание раздела «Собственная лента новостей»:
Комментарии любых посетителей

Написать комментарий