Программирование, веб-кодинг, Расширения, виджеты

Как генерировать RSS ленту в Yii2? Расширение yii2-rss

Как генерировать RSS ленту в Yii2? Расширение yii2-rss

Снова используем мощь разработанных расширений для Yii2. Для формирования RSS потока на сайте применим экстеншн zelenin/yii2-rss.

После привычной процедуры установки расширения через сomposer, в основной контроллер SiteController добавим действие actionRss()

public function actionRss()
    {
        $dataProvider = new \yii\data\ActiveDataProvider([
            'query' => \app\models\Blog::find()
                ->orderBy(['create_time' => SORT_DESC]),
            'pagination' => [
                'pageSize' => 10
            ],
        ]);

        $response = Yii::$app->getResponse();
        $headers = $response->getHeaders();

        $headers->set('Content-Type', 'application/rss+xml; charset=utf-8');

        $response->content = \Zelenin\yii\extensions\Rss\RssView::widget([
            'dataProvider' => $dataProvider,
            'channel' => [
                'title' => 'Yiico – статьи по Yii2 и Yii',
                'link' => Url::toRoute('/', true),
                'description' => 'Статьи ',
                'language' => Yii::$app->language
            ],
            'items' => [
                'title' => function ($model, $widget) {
                        return $model->title;
                    },
                'description' => function ($model, $widget) {
                        return StringHelper::truncateWords($model->text, 50);
                    },
                'link' => function ($model, $widget) {
                        return Url::toRoute(['blog/view', 'id' => $model->id, 'slug' => $model->slug], true);
                    },
                'guid' => function ($model, $widget) {
                        return Url::toRoute(['blog/view', 'id' => $model->id, 'slug' => $model->slug], true);
                    },
                'pubDate' => function ($model, $widget) {
                        $date = \DateTime::createFromFormat('Y-m-d H:i:s', $model->create_time);
                        return $date->format(DATE_RSS);
                    },
            ]
        ]);
    }

Не забудьте добавить в начало контроллера

use yii\helpers\Url;
use yii\helpers\StringHelper;

или там, где вызываются эти хелперы, указывайте полный путь до них.

Вот и всё, теперь по адресу http://site.ru/site/rss вы получите rss фид. Можно его импортировать в FeedBurner, он даёт больше возможностей управлять фидом и подписчиками. Для этого сайта я так и сделал – вот лента блога Yiico.ru: http://feeds.feedburner.com/yiico