RSS - неотъемлемая часть любого часто обновляемого проекта. В данном документе мы покажем, как можно создать RSS-feed при помощи Limb и MACRO.
Допустим, что нам необходимо сделать RSS-feed для последних новостей нашего туториала.
Создадим контроллер RssController.class.php, который будет делать вот что:
Вот его исходный код:
<?php lmb_require('limb/web_app/src/controller/lmbController.class.php'); class RssController extends lmbController { function doDisplay() { $params = array( 'sort' => array('date' => 'DESC', 'title' => 'ASC'), 'limit' => 5 ); $this->news = lmbActiveRecord::find('News', $params); $this->response->addHeader('Content-type: application/xml'); } }
Выборка последних новостей уже не должна вызывать у вас никаких затруднений, в данном случае мы просто сортируем сразу по двум параметрам.
А вот строка добавления заголовка уже интереснее. Вы уже знакомы с объектом запроса lmbHttpRequest (доступным через $this→request в контроллере и шаблоне), аналогично можно работать и с объектом ответа lmbHttpResponse. Здесь через метод addHeader добавляется HTTP-заголовок, необходимый для интерпретации отдаваемого сервером вывода как XML-документа.
Добавим шаблон template/rss/display.phtml. Вот он:
<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>YourDomain.com last news</title> <language>en</language> <description>Last 5 news from our site</description> <link>{{route_url/}}</link> <atom:link href="{{route_url/}}" rel="self" type="application/rss+xml"/> {{list using="$#news" as="$item"}} {{list:item}} <item> <guid isPermaLink="false">g{$item->id}</guid> <title>{$item->title}</title> <link>{{route_url params="controller:news,action:detail,id:{$item->id}"/}}</link> <description>{$item->annotation}</description> <pubDate><?=date('r', strtotime($item->date));?></pubDate> </item> {{/list:item}} {{/list}} </channel> </rss>
Отметим несколько деталей:
<?xml version="1.0" encoding="UTF-8"?>
MACRO корректно обрабатывает xml-заголовок при включенных short tags, вызывающих конфликты в обычных php-скриптах.
<link>{{route_url/}}</link>
Тег {{route_url/}} вызванный без параметров, возвращает абсолютную ссылку на текущую страницу.
<pubDate><?=date('r', strtotime($item->date));?></pubDate>
PHP-вставка выводит дату новости в нужном для RSS-формате.
В качестве финального штриха добавим ссылку на рсс-ленту в заголовок всех страниц нашего туториала, изменив шаблон template/page.phtml.
<html> <head> <title>Limb3 tutorial</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{{route_url params='controller:rss'}}"/> </head> <body bgcolor="#FFFFFF" text="#000000" > {{slot id="page_placeholder"/}} </body> </html>
Все! RSS-лента готова!
Спасибо, что дошли наш туториал до конца. Надеемся, что вам было интересно и познавательно.
Обсуждение