Web feed — это формат данных, особым образом сформированных на основе часто обновляющейся информации (новости сайта, статьи и т.п.). В этой статье мы опишем как можно использовать один из компонентов Zend_Feed офигенного фреймворка Zend для автоматической генерации такого фида для веб-приложения на основе Yii. А еще эту статью можно рассматривать как руководство по подключению и использованию любого компонента из обширнейшей библиотеки фреймворка Zend.
Подготовка
Для начала, давайте скачаем сам фреймворк и распакуем его в каталог protected/vendors/Zend. Для проверки того, что Вы сделали всё верно, посмотрите есть ли файл protected/vendors/Zend/Feed.php; если файл на месте — всё отлично!
Прим. пер.: хождение и регистрация на zendframework.com — это отдельный разговор, но сразу хочу сказать, что качал я minimal версию.
Программирование контроллера
Открываем SiteController (или любой другой, в котором Вы хотите сделать фид), создаём действие Feed:
Yii::import('application.vendors.*');
require_once('Zend/Feed.php');
public function actionFeed()
{// забираем последние 20 постов в блоге
$posts=Post::model()->findAll(array(
'order'=>'createTime DESC',
'limit'=>20,
));
// конвертируем полученные данные в формат для Zend Feed
$entries=array();
foreach($posts as $post)
{$entries[]=array(
'title'=>$post->title,
'link'=>$this->createUrl('post/show',array('id'=>$post->id)),
'description'=>$post->content,
'lastUpdate'=>$post->createTime,
);
}// генерация и отображение фида
$feed=Zend_Feed::importArray(array(
'title' => 'Тайтл моего фида',
'link' => $this->createUrl(''),
'charset' => 'UTF-8',
'entries' => $entries,
), 'rss');
$feed->send();
}
Теперь можно пройти по адресу http://www.example.com/index.php?r=site/feed и проверить работоспособность фид-генератора.
Прим. пер.: советую использовать для этого Mozilla Firefox - она отобразит фид в "человеческом" формате.
Оформление ссылки в заголовке сайта
Для того, чтобы посетитель Вашего сайта видел в адресной строке браузера значок RSS, в шаблон отображения (по умолчанию: protected/views/layouts/main.php) нужно вписать следующий код:
Yii::app()->clientScript->registerLinkTag(
'alternate',
'application/rss+xml',
$this->createUrl('site/feed'));
Прим. пер.: так, конечно, мы создадим возможность видеть этот значок в любом разделе нашего сайта, а если нам нужно сделать его видимым только в определенных разделах (статьи, новости и т.п.), то этот код необходимо вписать в действия только отвечающих за это контроллеров.
Можно, конечно, воспользоваться функцией CHtml::linkTag(), чтобы поместисть ссылку в выбранном нами месте страницы, но разница с первым методом заключается в том, что в первом случае ссылка может находится только в секции <head> выбранного представления или целого шаблона.
Zend_Feed несёт в себе ещё целую кучу полезных фишек. Если Вы заинтересовались, то прошу пожаловать в его референс-гайд.
Заключение. От переводчика
По этому «рецепту» я сделал для своего блога rss-фид за 15 минут. Причем на оформление и выбор картинки (которую можно увидеть в левой части) ушло 10 минут (и даже больше в связи с подгонкой цвета картинки к моей оранжевой полоске).

