Web feed — это формат данных, особым образом сформированных на основе часто обновляющейся информации (новости сайта, статьи и т.п.). В этой статье мы опишем как можно использовать один из компонентов Zend_Feed офигенного фреймворка Zend для автоматической генерации такого фида для веб-приложения на основе Yii. А еще эту статью можно рассматривать как руководство по подключению и использованию любого компонента из обширнейшей библиотеки фреймворка Zend.

Подготовка

Для начала, давайте скачаем сам фреймворк и распакуем его в каталог protected/vendors/Zend. Для проверки того, что Вы сделали всё верно, посмотрите есть ли файл protected/vendors/Zend/Feed.php; если файл на месте — всё отлично!

Прим. пер.: хождение и регистрация на zendframework.com — это отдельный разговор, но сразу хочу сказать, что качал я minimal версию.

Программирование контроллера

Открываем SiteController (или любой другой, в котором Вы хотите сделать фид), создаём действие Feed:

  1.  Yii::import('application.vendors.*');
  2.      require_once('Zend/Feed.php');
  3.      public function actionFeed()
  4.      {
  5.      // забираем последние 20 постов в блоге
  6.      $posts=Post::model()->findAll(array(
  7.          'order'=>'createTime DESC',
  8.          'limit'=>20,
  9.      ));
  10.      // конвертируем полученные данные в формат для Zend Feed
  11.      $entries=array();
  12.      foreach($posts as $post)
  13.      {
  14.          $entries[]=array(
  15.              'title'=>$post->title,
  16.              'link'=>$this->createUrl('post/show',array('id'=>$post->id)),
  17.              'description'=>$post->content,
  18.              'lastUpdate'=>$post->createTime,
  19.          );
  20.      }
  21.      // генерация и отображение фида
  22.      $feed=Zend_Feed::importArray(array(
  23.          'title'   => 'Тайтл моего фида',
  24.          'link'    => $this->createUrl(''),
  25.          'charset' => 'UTF-8',
  26.          'entries' => $entries,      
  27.      ), 'rss');
  28.      $feed->send();  
  29.  }

Теперь можно пройти по адресу http://www.example.com/index.php?r=site/feed и проверить работоспособность фид-генератора.

Прим. пер.: советую использовать для этого Mozilla Firefox - она отобразит фид в "человеческом" формате.

Оформление ссылки в заголовке сайта

Для того, чтобы посетитель Вашего сайта видел в адресной строке браузера значок RSS, в шаблон отображения (по умолчанию: protected/views/layouts/main.php) нужно вписать следующий код:

  1.  Yii::app()->clientScript->registerLinkTag(
  2.      'alternate',
  3.      'application/rss+xml',
  4.      $this->createUrl('site/feed'));

Прим. пер.: так, конечно, мы создадим возможность видеть этот значок в любом разделе нашего сайта, а если нам нужно сделать его видимым только в определенных разделах (статьи, новости и т.п.), то этот код необходимо вписать в действия только отвечающих за это контроллеров.

Можно, конечно, воспользоваться функцией CHtml::linkTag(), чтобы поместисть ссылку в выбранном нами месте страницы, но разница с первым методом заключается в том, что в первом случае ссылка может находится только в секции <head> выбранного представления или целого шаблона.

Zend_Feed несёт в себе ещё целую кучу полезных фишек. Если Вы заинтересовались, то прошу пожаловать в его референс-гайд.

Перевод: How to generate Web feed for an application.

Заключение. От переводчика

По этому «рецепту» я сделал для своего блога rss-фид за 15 минут. Причем на оформление и выбор картинки (которую можно увидеть в левой части) ушло 10 минут (и даже больше в связи с подгонкой цвета картинки к моей оранжевой полоске).