RSS блога для SimplaCMS 2.1+
Поскольку в новой версии есть API и View (разделение классов и отображения), то мы можем создать универсальный модуль для RSS, который в последствии будем расширять (новинок каталога, рекомендуемых, статей и т.п.).
В папку view создадим файл RssView.php (или скачаем архив и распакуем его в корень сайта)
<?PHP /** * Simpla CMS * * @copyright 2013 Redline Studio * @link http://simplashop.com * @author Artiom Mitrofanov * */ require_once('View.php'); class RssView extends View { public function fetch() { // Количество постов на 1 странице $items_per_page = 20; $params = array(); $params['visible'] = 1; $params['limit'] = $items_per_page; switch($this->request->get('type', 'string')) { default: $items = $this->blog->get_posts($params); $category = 'Блог'; $cat_url = $this->config->root_url.'/blog'; $base_url = $this->config->root_url.'/blog/'; } header("Content-Type: application/rss+xml; charset=UTF-8"); //выберем первую запись, чтобы сформировать дату публикации //правда эта логика верна только для блога, т.к. он отсортирован по дате с убыванием //для каталога такое не пройдет - но об этом потом $p = $items[0]; $rssfeed = '<?xml version="1.0" encoding="UTF-8"?>'; $rssfeed .= '<rss version="2.0">'; $rssfeed .= '<channel>'; $rssfeed .= '<title>'.$this->settings->site_name.'</title>'; $rssfeed .= '<link>'.$cat_url.'</link>'; $rssfeed .= '<description>'.$this->settings->company_name.'</description>'; $rssfeed .= '<language>ru-ru</language>'; $rssfeed .= '<category>' . $category . '</category>'; $rssfeed .= '<copyright>Copyright '.date('Y').' '.$this->settings->company_name.'</copyright>'; $rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O", strtotime($p->date)) . '</pubDate>'; $rssfeed .= '<lastBuildDate>' . date("D, d M Y H:i:s O", strtotime($p->date)) . '</lastBuildDate>'; // Выбираем статьи из базы foreach($items as $p) { $rssfeed .= '<item>'; $rssfeed .= '<guid isPermaLink="true">'. $base_url . $p->url . '</guid>'; $rssfeed .= '<link>'. $base_url . $p->url . '</link>'; $rssfeed .= '<title>' . $p->name . '</title>'; $rssfeed .= '<description><![CDATA[' . ($p->annotation) . ']]></description>'; $rssfeed .= '<comments>'. $base_url . $p->url . '#comments</comments>'; $rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O", strtotime($p->date)) . '</pubDate>'; $rssfeed .= '</item>'; } $rssfeed .= '</channel>'; $rssfeed .= '</rss>'; print($rssfeed); exit(); } }
Я намерено использую папку view для данных классов, чтобы не создавать "мусор" в корне сайта (как там лежит и yandex.php или sitemap.php :( ). Поскольку этих мелких классов может быть много - в итоге получится заваленный "корень".
Теперь просто создадим редирект на него в файле .htaccess в корне сайта. Перед
# Google sitemap
добавим код
# RSS RewriteRule ^rss?$ index.php?module=RssView [L,QSA]
Теперь можете открыть путь http://[ваш_сайт]/rss и увидеть Вашу ленту. Некоторые броузеры распознают альтернативную ссылку на feed, поэтому можете в файле design/[ваш_шаблон]/html/index.tpl в раздел head добавить ссылку
<link rel="alternate" type="application/rss+xml" title="RSS" href="rss" />
Далее как будет время дополним наш RSS разделом для вывода новинок каталога и других полезностей.
Есть у нас такой модуль http://simplashop.com/products/rss-catalog