DbHelp.ru
Маленький Yii блог
Комментарии
Гость: Подробная i188 инструкция. j236 Бланк на закрытие ип 2017 пре...
Гость: На сегодняшний день загородный дом по уровню комфорта ...
Гость: Я, вам завидую. Ваш блог намного лучше по содержанию и д...
Гость: Подробная i625 инструкция. p957 Бланк для закрытие ип 2017 пр...
Гость: смотреть порно зоофилы курительные смеси спайс зоо ...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Компонент Rss ленты v2.0

Рубрика: Компоненты

Оцените эту статью:

Рейтинг: 0.00 (0)
8 Апр. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.rurssssss Немного обсудив своё творение «Компонент Rss ленты v 1.0» на русском форуме я решил немного его переделать. Мною было принято решение включить в его функционал возможность самому задавать конфигурацию, и создавать несколько лент не наследуя класс ленты.

---

Если старый вариант компонента можно назвать «lite» версией, то этот думаю пойдет под лозунгом «prof» :) Первым делом вы должны прочитать описание первой версией компонента, если вам достаточно её функционала – то можете вполне использовать v 1.0. Обе версии компонента – рабочие, просто 2.0 имеет большее кол-во возможностей.

Войдите в protected/components и создайте там новый файл Rss.php:

/**
 * RSS class file
 *
 * @author Alekseenko Timur <[email protected]>
 * @link http://www.dbhelp.ru/
 * @copyright Copyright 2009
 * @version 2.0.0
 */
    Class Rss extends CWidget {
        
        /**
         * $config Используется для перезаписи значений по умолчанию
         *
         * @var unknown_type
         */
        public  $config = array();
        /**
         * $def_config Содержит в себе значения по умолчанию
         *
         * @var unknown_type
         */
        private $def_config = array(
                // -----------------------------------------
                // название ленты
                        'name'        => "DbHelp.ru",
                // -----------------------------------------
                // описание ленты
                        'desc'        => "Маленький Блог для Yii программистов!",
                // -----------------------------------------
                // поле copyright
                        'copyright' => "Copyright 2009, dbhelp.ru",
                // -----------------------------------------
                // Sql по которому будет идти отбор в ленту
                        'criteria'    => "active = 1 ORDER BY created DESC",
                // -----------------------------------------
                // Сколько символов из tb_body будет показано на в ленте
                        'body_size' => 500,
                // -----------------------------------------
                // Колонка в таблице которую будем использовать как Title ленты
                        'tb_title'    => "name",
                // -----------------------------------------
                // Колонка в таблице которую будем использовать как Body ленты
                        'tb_body'    => "text",
                // -----------------------------------------
                // Колонка в таблице которую будем использовать дату
                        'tb_date'    => "created",
                // -----------------------------------------
                // Колонка в таблице которая содержит url новости
                        'tb_url'    => "url",
                // -----------------------------------------
                // Префикс который надо вставить в конце url. Если ненадо - удалите.
                        'z_prefix' => "page",
                // -----------------------------------------
                // Префикс который надо вставить в начале url. Если ненадо - удалите.
                        'p_prefix' => "",
                // -----------------------------------------
                // Название модели из которой будем брать данные
                        'model'     => "Posts",
                      );
        
        function init()
        {
            if (empty($this->config['url']))
                      $this->config['url'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."/";
            
            $this->config = array_merge($this->def_config, $this->config);
            eval('$date = '.$this->config['model'].'::model()->findAll("'.$this->config['criteria'].'");');
            
            $this->render('rss/index', array('arr' => $date));
        }
    }

Как видите в $this->def_config включены все существующие настройки для компонента. Если значений по умолчанию вам не подходят – вам следует переопределить их в отображении при вызове компонента.

Давайте немного более подробно разберем для чего каждый из параметров:

  1. Name– задает имя RSS ленты.
  2. Desc – задает описание для ленты. (выводится ниже имени)
  3. Copyright – копирайт поле
  4. Criteria – содержит в себе SQL запрос который влияет на то какие данные будут выбраны из модели. В примере по умолчанию выбираются все активированные записи (active = 1) отсортированные по полю created.
  5. Body_size – Кол-во символов новости которые будут выводится в ленте
  6. tb_title – название поля в таблице которое будет использовано в качестве заголовка
  7. tb_body – название поля в таблице которое будет использовано в качестве текста новости
  8. tb_date – название поля в таблице которое будет использовано в качестве даты новости
  9. tb_url – если в вашей таблице есть поле содержащее url новости – тогда подставитье его сюда. В ином случае – вы можете использовать поле с первичным ключем
  10. z_prefix – префикс в url перед tb_url
  11. p_prefix – префикс в url после tb_url
  12. model – модель которую будем использовать для того чтобы достать данные. Таблица с которой работает модель и будет фигурировать в нашей rss ленте

Как и в первой версии отображение для нашей ленты находится по адресу protected/components/views/rss/index.php и содержит следующий код:

<?='<?xml version="1.0" encoding="UTF-8"?>'; ?>
<rss version="2.0">    
    <channel>
        <title><?=$this->config['name']?></title>
        <link><?=$this->config['url']?></link>
        <description><?=$this->config['desc']?></description>
        <copyright><?=$this->config['copyright']?></copyright>
        
            <?php foreach ($arr as $key => $val): ?>
            <item>
               <title><?=addslashes(eval('return $val->'.$this->config['tb_title'].';'))?></title>
               <link><?=$this->config['url'].$this->config['p_prefix'].eval('return $val->'.$this->config['tb_url'].';').'/'.$this->config['z_prefix'].'/'?></link>
               <description><?=htmlspecialchars(mb_substr(strip_tags(eval('return $val->'.$this->config['tb_body'].';')), 0, $this->config['body_size']))."...";?></description>
               <pubDate><?=eval('return $val->'.$this->config['tb_date'].';');?></pubDate>
            </item>
            <?php endforeach; ?>
            
    </channel>
</rss>

Теперь чтобы подключить наш виджет к вам на сайт – необходимо создать новый контроллер Rss или добавить к существующему новый экшинс. Я предлагаю создать новый контроллер controllers/ RssController.php:

    class RssController extends CController
    {
        var $layout = " ";
        
        function actionIndex()
        {
            $this->render('index');
        }
    }

Как видите он имеет всего один экшинс который рендарит index отображением. В самом отображении (view/rss/index.php) мы просто обращаемся к виджету:

$this->widget('Rss', 
            array(
                'config' => array(
                    'name' => "DbHelp.ru",
                ))
      );

Вот в принципе и все.

Для того чтобы изменить свою ленту и её работу вы просто указываете необхадимые настройки в виде параметра config. При этом если какой то из параметров вы не указали – вместо него будет подставлено "значение по умолчанию".

Данный виджет теперь по праву можно считать полноценным компонентом и использовать в своё удовольствие.



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. В данном переводе раскрыта идея как закрыть сайт от гостей. т.е. пользователи должны войти в систему прежде чем смогут увидеть ... "Закрываем сайт от лишних глаз"

  2. Последние пару дней я проводил небольшие технические работы на блоге, но всё не было времени запостить тему про всё что ... "Обновление на DbHelp.ru"

  3. Хочу вас обрадовать выходном новой версии замечательного Yii фреймворка. Данный релиз был немного задержан посравнению с обычным графиком, но ... "Yii Framework 1.0.5"

RSol

Было сказано: Пятница, 12 Июнь 2009

zolter, поставь для своих тегов code css свойство

overflow:auto;

:)

[guest] zolter

Было сказано: Суббота, 13 Июнь 2009

Сенк, завтра добавлю :)

[adm] zolter

Было сказано: Понедельник, 15 Июнь 2009

Спасибо, так лучше :)

[guest] Bethrezen

Было сказано: Понедельник, 29 Июнь 2009


<description><?=$this->config['desc']?></description>
<copyright><?=$this->config['copyright']?></copyright>';

<?php foreach ($arr as $key => $val): ?>


Убери '; после </copyright>

[adm] zolter

Было сказано: Вторник, 30 Июнь 2009

точно :) спасибо

[guest] Гость

Было сказано: Четверг, 18 Ноябрь 2010

А header с типом xml отправлять не надо?

[guest] zolter

Было сказано: Четверг, 18 Ноябрь 2010

Неа, так понимает за счет <?xml впереди всеми нормальными браузерами.

[guest] Гость

Было сказано: Четверг, 02 Февраль 2012

"указываете необхадимые"
необхОдимые =)

Оставить комментарий


Код:
Имя: