DbHelp.ru
Маленький Yii блог
Комментарии
Гость: wh0cd1144039 [url=http://buy-prednisolone.reisen]buy prednisolone[/url] buy prednisolone 5mg without...
Гость: write my essay for me write an essay write essay my essay writing
Гость: wh0cd660443 [url=http://buy-celebrex.reisen]buy celebrex[/url] how much is celebrex http://buy-celeb...
Гость: wh0cd1144039 [url=http://buyadvair.store]advair[/url] advair http://buyadvair.store [url=http://buy-...
Гость: wh0cd660443 [url=http://buyprozac.shop]buy prozac online uk[/url] buy prozac online http://buyprozac...



Сервер 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. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 6 : Регистрация и авторизация. Часть 1"

  2. Наиболее легкий способ обновления содержимого через Ajax, это использование метода partialRender(). Давайте научимся им пользоваться! next     Для этого примера у меня есть ... "Обновление содержимого через AJAX используя renderPartial()"

  3. ... "Art"

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

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

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


Код:
Имя: