====== Создание RSS-feed при помощи Limb2 ====== RSS - неотъемлемая часть любого часто обновляемого проекта. В данном документе мы покажем, как можно создать RSS-feed при помощи Limb и WACT. Допустим, что нам необходимо сделать RSS-feed для последних новостей и документов. Создадим простейший скрипт **last-news-feed.php**, который будет делать вот что: * получать последние новости и документы, * объединять полученные объекты и сортировать их по дате последней модификации. Если даты равны, то будет применять еще один сортировочный механиз (например, по заголовку), * нормализовать аттритуры hrefs для того, чтобы сделать их абсолютными, то есть href='/root/test/../new' должен стать href='http://yourdomain.com/root/new' * передавать обработанные данные в WACT шаблон Следующий код во многом не требует дополнительных комментариев: $b['node_id']) return -1; else return 1; } return ($date1 > $date2) ? -1 : 1; } //функция, которая конвертирует относительные ссылки в абсолютные, используя базовый путь function fix_hrefs($base_path, $content) { $GLOBALS['base_path'] = $base_path; return preg_replace_callback('~href=("|\')?([^"\'>\s]+)("|\')?~', '_replace_callback', $content); } function _replace_callback($matches) { if(preg_match('~(https?|ftp)://~', $matches[2])) return $matches[0]; $url = get_qualified_url($GLOBALS['base_path'], $matches[2]); return "href='{$url}'"; } function get_qualified_url($base_path, $raw_path) { $path = $raw_path; if($path{0} != '/') { $uri = new uri($base_path . '/' . $path); $uri->normalize_path(); $path = $uri->get_path(); } return 'http://' . $_SERVER['HTTP_HOST'] . $path; } // получаем новости $counter = 0; $params = array( 'limit' => 3, 'order' => array('modified_date' => 'DESC') ); $arr_news = fetch('news_object', $counter, $params, 'fetch_accessible'); // получаем документы $params = array( 'limit' => 3, 'order' => array('modified_date' => 'DESC') ); $arr_documents = fetch('document', $counter, $params, 'fetch_accessible'); // объединяем и сортируем данные $arr = array_merge($arr_documents, $arr_news); uasort($arr, 'sorter'); foreach($arr as $key => $data) { // делаем все ссылки в контенте абсолютными $arr[$key]['annotation'] = fix_hrefs($data['path'], $data['annotation']); // делаем uri до объекта абсолютным $arr[$key]['path'] = get_qualified_url($data['path'], $data['path']); } // создаем источник данных для шаблона $ds = new array_dataset($arr); // перадаем данные в шаблон $template = new template('/rss/last_news.rss'); $template->set('xml', ''); $news = & $template->find_child('last_news'); $news->register_dataset($ds); // выводим результат header("Content-Type: application/xml"); $template->display(); ?> А теперь шаблон: {$xml} ]> YourDomain.com last news http://YourDomain.com YourDomain.com site en {$title} {$path} Обратите внимание, что мы используем тег **** для того, чтобы очистить html-код, а также тег **** для вывода локализованной даты. Теперь поместим этот скрипт в **PROJECT_DIR/last-news-feed.php** и шаблон в **PROJECT_DIR/design/main/templates/rss/last_news.rss**. Далее ставим ссылку на RSS-feed где-нибудь на странице сайта, например так: Вот и все!