====== Шаг6. Создание RSS-feed новостной ленты ====== RSS - неотъемлемая часть любого часто обновляемого проекта. В данном документе мы покажем, как можно создать RSS-feed при помощи Limb и WACT. Допустим, что нам необходимо сделать RSS-feed для последних новостей нашего туториала. Создадим скрипт **last-news-feed.php**, который будет делать вот что: * получать последние новости, * сортировать их по дате последней модификации, * нормализовать атрибуты hrefs для того, чтобы сделать их абсолютными, то есть href='/test/../new' должен стать href='http://yourdomain.com/new' * передавать обработанные данные в WACT шаблон, где будет формироваться XML * отдавать XML клиенту. Вот его исходный код: setChildDataSet('last_news', getNewsDataSetWithFullPaths()); header("Content-Type: application/xml"); $template->display(); /*-------------------------------------------------------*/ function getNewsDataSetWithFullPaths() { $news_rs = lmbActiveRecord :: find('News', array('sort' => array('date' => 'DESC', 'title' => 'ASC'), 'limit' => 5)); $result = array(); foreach($news_rs as $news) { $news_id = $news->getId(); $result[$news_id] = $news->export(); $result[$news_id]['path'] = 'http://' . $_SERVER['HTTP_HOST'] . '/news/detail/' . $news_id; } return new lmbArrayDataset($result); } ?> Поясним, что же здесь происходит: array('date' => 'DESC', 'title' => 'ASC'), 'limit' => 5)); $result = array(); foreach($news_rs as $news) { $news_id = $news->getId(); $result[$news_id] = $news->export(); $result[$news_id]['path'] = 'http://' . $_SERVER['HTTP_HOST'] . '/news/detail/' . $news_id; } return new lmbArrayDataset($result); } ?> При помощи функции _getNewsDataSetWithFullPaths() мы загружаем набор из новостей из таблички news, сортируя их по дате и заголовку, ограничивая раздел выборки 5-ю элементами. Для выборки мы использовали статический метод lmbActiveRecord :: find(), который принимает название класса получаемых объектов и массив параметров, которые нужно применить к выборке. В нашем случае мы передали параметры **sort** и **limit**. Параметр sort передается в виде массива вида - поле => способ_сортировки. Если бы мы делали все в шаблоне, то тот же самый код можно было бы записать: Далее при помощи: $result = array(); foreach($news_rs as $news) { $news_id = $news->getId(); $result[$news_id] = $news->export(); $result[$news_id]['path'] = 'http://' . $_SERVER['HTTP_HOST'] . '/news/detail/' . $news_id; } return new lmbArrayDataset($result); Мы создаем новый итератор в виде объекта класса lmbArrayDataset, который будет содержать данные, которые необходимо будет поместить в rss-список. Затем мы явно инициализируем WACT шаблон rss/last_news.rss и передаем тегу итератор с данными: $template = new lmbWactTemplate('rss/last_news.rss'); $template->setChildDataSet('last_news', getNewsDataSetWithFullPaths()); Вот сам шаблон rss/last_news.rss : ]> YourDomain.com last news en {$title} {$path} {$annotation} {$date} После этого мы отсылаем браузеру соответствующий заголовок и отдаем ему содержимое отрендеренного шаблона: header("Content-Type: application/xml"); $template->display(); Добавим ссылку на RSS ленту на все страницы, изменив шаблон template/page.html: Limb3 tutorial RSS-feed
===== Далее ===== * [[.step7|Шаг7. Рекомендации по дальнейшему изучению]]