Хелпер Feed

Комментарии: 6  Просмотры: 6 966

Думаю все знают, что такое RSS-канал. Те, кто не знает, могут посмотреть, как он примерно выглядит Здесь. Если взглянуть на исходный код страницы RSS-канала, видно, что он полностью написан на XML. С помощью Коханы такой XML-код создать очень просто. Для этого используется специальный Хелпер Feed.

Класс Feed
Основным методом данного класса является метод create, который собственно и генерирует XML-код исходя из переданных параметров. Таких параметров всего четыре: два обязательных и два необязательных. Первый параметр — это массив с информацией, которая помещается в заголовок (название, дата публикации итд), второй параметр — массив с данными. И оставшиеся необязательные третий и четвертый параметры — это формат и кодировка. Вот как это примерно выглядит:

$info = array(
'title' => 'Комментарии нашего сайта'
); 
 
$items = array(
    array('title' => 'Комментарий к статье 2', 'description' => 'А почему здесь так ?', 
          'link'  => URL::site('/articles/article2'), 'pubDate' => date('r', time())), 
    array('title' => 'Комментарий к статье 1', 'description' => 'Ничего не понял', 
          'link'  => URL::site('/articles/article1'), 'pubDate' => date('r', time() - 2500))
);
 
echo Feed::create($info, $items);

После вывода наши массивы преобразуются в такой XML-код:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Комментарии нашего сайта</title>
    <link>http://kohana/</link>
    <generator>KohanaPHP</generator>
    <item>
      <title>Комментарий к статье 2</title>
 
      <description>А почему здесь так ?</description>
      <link>http://kohana/articles/article2</link>
      <pubDate>Wed, 07 Mar 2012 17:32:18 -0600</pubDate>
    </item>
    <item>
      <title>Комментарий к статье 1</title>
      <description>Ничего не понял</description>
 
      <link>http://kohana/articles/article1</link>
      <pubDate>Wed, 07 Mar 2012 16:50:38 -0600</pubDate>
    </item>
  </channel>
</rss>

А вот так это выглядит уже в браузере:
RSS Feed

Как видите, все очень легко и просто. К сожалению изучение XML выходит за рамки этого урока. Поэтому мы переходим ко второму методу нашего класса — методу parse. Этот метод выполняет обратную операцию — он принимает в качестве параметра переменную, в которой содержится XML-код RSS-файла и превращает ее в массив со всеми значениями этого RSS-файла. Давайте теперь не будем выводить наш XML-код в браузер, а сохраним его в переменную и отдадим методу. Для этого переделаем концовку нашего кода:

$xml = Feed::create($info, $items);
$array = Feed::parse($xml);

После этих манипуляций содержимое массива будет следуюшим:

Array
(
    [0] => Array
        (
            [title] => Комментарий к статье 2
            [description] => А почему здесь так ?
            [link] => http://kohana/articles/article2
            [pubDate] => Wed, 07 Mar 2012 18:21:15 -0600
        )
 
    [1] => Array
        (
            [title] => Комментарий к статье 1
            [description] => Ничего не понял
            [link] => http://kohana/articles/article1
            [pubDate] => Wed, 07 Mar 2012 17:39:35 -0600
        )
 
)

Данный метод принимает еще один — необязательный параметр. Это лимит на количество распарсеных значений. Если для нашего случая вторым параметром поставить единицу, то прийдет только массив с Комментарием к статье 2.
Вот собственно и все, что я хотел вам рассказать об этом интересном и весьма полезном Хелпере. Пробуйте, учитесь и не забудьте поздравить своих милых дам с праздником. Удачи.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 6 коммент.

Спасибо за урок. Очень радует простота работы с XML в Кohana

А у этого бложика нету RSS ?)

ММ, нашел внизу страницы РСС комментариев. А статей нету?

Как хелпер поведет себя с вложенными тегами в XML ?

Шикарный сайт, всё по полочкам, разобрался с фреймворком за неделю, правда до ORM руки не дошли, по старинке просто моделью пользуюсь)))

вчера с фидом столкнулся, возникло пару вопросов по контроллерам, я ранее считал, что если в любом экшене присвоить темплейт, то он присвоится, пример:
$this->template = ‘template2′;
$this->template-content = ‘бла-бла-бла’;

но как выяснилось данная конструкция не работает, вопрос так и задуманно, или я, что то не то делаю?
kohana 3.3

почему столкнулся то, начал выводить фид в экшене основного контроллера, а как оказалось после echo Feed::create(); в страницу под rss добалялся весь остальной шаблон сайта(хотя мозила отображала только XML, но после подписки говорила что «невозможно загрузить ленту новостей»), который присвоен контроллеру. Вот и решил по эксперементировать, в итоге пришел к тому, что для одного экшена rss пришлось свой контроллер клепать rss, это правильно? или таки можно присвоить теплейт «на лету»?

я почему спрашиваю, тут у меня сейчас есть контроллер для аякса, тоже со своим темплейтом который просто кодирует в json полученные данные, но подумывал в основной контроллер засунуть экшены, для получения ответов в json, просто сменой шаблона в экшене, как убедился идея оказалась бы провальной)

Ввел всех в заблуждение по собственной глупости :)

Исправляюсь:
$this->template = View::factory(‘template2?);



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.