RSS блога для SimplaCMS 2.1+

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 разделом для вывода новинок каталога и других полезностей.

Отзывы

Оставьте отзыв
На него будут приходить уведомление при ответе. На сайте не публикуется

Модули из этой тематики