[v1.0] Создаем RSS ленту на Yii
[v1.0] Создаем RSS ленту на Yii
Вот надо было сегодня RSS к блогу сделать, поэтому решил осветить процесс создания RSS ленты на Yii. В принципе всё точно также как на любом фреймворке, просто заточено под Yii и написано своими пальцами.
Создаем RSS ленту на Yii (статья)
Создаем RSS ленту на Yii (статья)
Последний раз редактировалось Ozzy 2009.04.14, 00:16, всего редактировалось 3 раза.
Мой маленький блог - http://dbhelp.ru
Re: Создаем RSS ленту на Yii
для начала я не совсем понял зачем это надо было оформлять как widget (да и вообще как отдельный компонент не вижу смысла)?
почему просто в контроллере не вызвать представление?
во первых виджеты решают другие задачи.
во вторых Летна RSS, это такая же страница сайта как и любая другая, только лишь со своим представлением!
я бы для контроллера Rss, сделал бы отдельный layout (макет).
примерно такого содержимого
Это основной макет для всех RSS лент (у нас то их может быть много). (положим его в views/layouts/rss.php)
установить его для всего контроллера можно через CController::layout
а дальше в actions этого контроллера, просто рендерил бы представление для каждой конкретной ленты, через:
соответственно представление выглядело бы так (в файле views/rss/posts.php):
ну и + ошибки в статье:
почему просто в контроллере не вызвать представление?
Код: Выделить всё
$this->renderPartial('index', array('arr' => Posts::model()->findAll('active = 1 ORDER BY created'));
во вторых Летна RSS, это такая же страница сайта как и любая другая, только лишь со своим представлением!
я бы для контроллера Rss, сделал бы отдельный layout (макет).
примерно такого содержимого
Код: Выделить всё
<?='<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL; ?>
<rss version="2.0">
<channel>
<title><?=$title ?></title>
<link> <?=$baseUrl ?> </link>
<description><?=$desc?></description>
<copyright>$copy</copyright>
<?=$content?>
</channel>
</rss>
установить его для всего контроллера можно через CController::layout
а дальше в actions этого контроллера, просто рендерил бы представление для каждой конкретной ленты, через:
Код: Выделить всё
$this->render('posts', array('arr' => Posts::model()->findAll('active = 1 ORDER BY created'));
Код: Выделить всё
<?php foreach ($arr as $key => $val): ?>
<item>
<title><?=addslashes($val->name)?></title>
<link><?php echo Yii::app()->request->baseUrl.'/'.$val->url.'/post/'?></link>
<description><?=htmlspecialchars(mb_substr(strip_tags($val->text), 0, 500))."...";?></description>
<pubDate><?=$val->created;?></pubDate>
</item>
<?php endforeach; ?>
ну и + ошибки в статье:
не RssCWidget а CWidget...Сам класс у нас наследуется от RssCWidget что бы иметь кое-какой базовый функционал (вроде render и тп).
Re: Создаем RSS ленту на Yii
to pirrat
я понимаю что критиковать проще чем писать своё.
мне так удобнее и многим так понятнее. еще вопросы? если вам не нравится такой подход - так не используйте. он не является нарушением MVС и по душе многим людям. если вы мне представите в документации MVC строчки о том что виджет не в коем случае не должна использоваться как стороняя либса для удобства - тогда я с вами соглашусь.
за ошибку спасибо, уже поправил
я понимаю что критиковать проще чем писать своё.
мне так удобнее и многим так понятнее. еще вопросы? если вам не нравится такой подход - так не используйте. он не является нарушением MVС и по душе многим людям. если вы мне представите в документации MVC строчки о том что виджет не в коем случае не должна использоваться как стороняя либса для удобства - тогда я с вами соглашусь.
за ошибку спасибо, уже поправил
Мой маленький блог - http://dbhelp.ru
Re: Создаем RSS ленту на Yii
я согласен что у каждого свой подход, и каждый имеет право на свое мнение.
Я вот высказал свое, что ваш подход мне не нравится и я предложил свой!
Собственно понятие Widget я интерпретирую не так как вы видимо.
Мне ближе понятие, такое как описано в документации:
Ну понятия это не столь важно, другое дело универсальность:
При вашем подходе для каждой новой ленты( у нас на сайте их может быть несколько), придется писать:
класс виджета, метод в контроллере, отображение..
ну не как не вижу смысла вводить тут дополнительный класс, подобные вашим..
все это ИМХО естесвено...
Я вот высказал свое, что ваш подход мне не нравится и я предложил свой!
Собственно понятие Widget я интерпретирую не так как вы видимо.
Мне ближе понятие, такое как описано в документации:
Т.е. это такой своеобразный динамический блок, который встраивается в отображении, в понятиях многих CMS, это часто называется просто: Блок!Виджеты обычно встраивают в скрипт представления для генерации некоторой комплексной самодостаточной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга комплексного интерфейса календаря.
Ну понятия это не столь важно, другое дело универсальность:
При вашем подходе для каждой новой ленты( у нас на сайте их может быть несколько), придется писать:
класс виджета, метод в контроллере, отображение..
ну не как не вижу смысла вводить тут дополнительный класс, подобные вашим..
все это ИМХО естесвено...
Re: Создаем RSS ленту на Yii
В моем подходе если мы захотим сделать еще одну ленту мы делаем просто:
мне кажется это удобнее чем лопатить контроллер на изменением конфига руками.
но это опять такие моё виденье на разработку. я не отрицаю что можно было реализовать как предложили вы, но мне такой подход не по душе. как вы уже привели часть доки:
опять таки, в моем виджете как вижу ошибок нету. а всё о чем мы щяс говорим - это дело вкуса. вам удобнее так - кому то удобнее по другому. при том что в вашем подходе что в моем модель MVC не нарушается. поэтому не вижу смысла дальше спорить
Код: Выделить всё
<?php $this->widget('Rss', array('config' => новый_конфиг)); ?>
но это опять такие моё виденье на разработку. я не отрицаю что можно было реализовать как предложили вы, но мне такой подход не по душе. как вы уже привели часть доки:
виджет ленты как раз таки и является тем самым самодостаточным динамическим блоком.Виджеты обычно встраивают в скрипт представления для генерации некоторой комплексной самодостаточной части пользовательского интерфейса. К примеру, виджет календаря может быть использован для рендеринга комплексного интерфейса календаря.
опять таки, в моем виджете как вижу ошибок нету. а всё о чем мы щяс говорим - это дело вкуса. вам удобнее так - кому то удобнее по другому. при том что в вашем подходе что в моем модель MVC не нарушается. поэтому не вижу смысла дальше спорить
Мой маленький блог - http://dbhelp.ru
Re: Создаем RSS ленту на Yii
в вашем подходе:
если мне нужно вывести допустим 2 ленты: постов и комментариев, мне придется писать ещё один виджет, так как модель у вас жёстко забита в класс!array(
// вместо Posts укажите название вашей модели
'arr' => Posts::model()->findAll('active = 1 ORDER BY created DESC')
));
Re: Создаем RSS ленту на Yii
Согласен. Что бы реализовать то что я написал надо добавить дополнительный парраметр в конфиг а ту строчку что вы написали вызывать как:
или eval-м добавить название таблицы через конфиг. короче сегодня сделаю - отпишу.
Код: Выделить всё
'arr' => $$this->config['...']::model()->findAll('active = 1 ORDER BY created DESC')
Мой маленький блог - http://dbhelp.ru
Re: Создаем RSS ленту на Yii
Извините за мою придирчивость, но в предложенном варианте, тогда ещё нужно и в конфиге передавать имя отображения, так как оно будет отличатся в разных лентах ну или генерировать его на основе имени модели
Re: Создаем RSS ленту на Yii
имена таблиц можно будет выдрать через конфиг т.к. yii не телепат что бы понять что там заголовок а что текст. в любом случае уже для интереса реализую сегодня эту фигню и тока попробуй сказать мне что твой вариант с контроллером будет всеравно удобнееpirrat писал(а):Извините за мою придирчивость, но в предложенном варианте, тогда ещё нужно и в конфиге передавать имя отображения, так как оно будет отличатся в разных лентах ну или генерировать его на основе имени модели
Мой маленький блог - http://dbhelp.ru
Re: Создаем RSS ленту на Yii
я не сказал что мой вариант удобнее, я сказал что он проще, а ваш, в таком виде, как он есть, не имеет смысла =)
Re: Создаем RSS ленту на Yii
если работает - значит имеет смысл.
плюс как видно мой проще расширить новым функционалом что будет невозможно сделать при вашем варианте.
плюс как видно мой проще расширить новым функционалом что будет невозможно сделать при вашем варианте.
Мой маленький блог - http://dbhelp.ru
Re: [v1.0] Создаем RSS ленту на Yii
Вот и готово.
Сейчас запощу у себя и сразу кину тут ссылку
Сейчас запощу у себя и сразу кину тут ссылку
Мой маленький блог - http://dbhelp.ru
-
- Сообщения: 2
- Зарегистрирован: 2010.11.29, 10:41
Re: [v1.0] Создаем RSS ленту на Yii
Спасибо автору
Re: Создаем RSS ленту на Yii
Отличное решение! Именно так и сделал после несколькочасовых попыток укротить компонент efeed (проблемы были с разметкой которая не хотела валидироваться, а где и как поменять не хватило знаний). Зато так - всё предельно гибко и ясно. Изменились немного стандарты - залез и поправил как хочешь. Спасибо!pirrat писал(а):для начала я не совсем понял зачем это надо было оформлять как widget (да и вообще как отдельный компонент не вижу смысла)?
почему просто в контроллере не вызвать представление?
...