Как правильно делать контроллер для главной страницы
-
- Сообщения: 54
- Зарегистрирован: 2010.06.12, 22:18
- Откуда: Набережные Челны
- Контактная информация:
Как правильно делать контроллер для главной страницы
На главной странице сайта городского телевидения должны быть новости из двух категорий: новости города и новости компании (например по 5 последних).
Как это в принципе надо правильно делать в Yii? Можете подсказать хотя бы общую идею. Создать контроллер Index и в нем получать данные от 2 моделей?
Или это делается по-другому? Например через виджеты? Также надо выводить информационные блоки, например программа передач.
То есть в одном контроллере - главной страницы надо обращаться к куче моделей и результат передавать в массивы, все это вручную отображать где нужно на странице?
Или есть есть способ получше ? (желательно хотя немного кода )
Как это в принципе надо правильно делать в Yii? Можете подсказать хотя бы общую идею. Создать контроллер Index и в нем получать данные от 2 моделей?
Или это делается по-другому? Например через виджеты? Также надо выводить информационные блоки, например программа передач.
То есть в одном контроллере - главной страницы надо обращаться к куче моделей и результат передавать в массивы, все это вручную отображать где нужно на странице?
Или есть есть способ получше ? (желательно хотя немного кода )
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Правильнее всего будет создать два виджета: для новостей города и для новостей компании.
Далее в контроллере просто выводим шаблон, в котором в необходимых местах вызываем виджеты.
То же с инфоблоками.
Далее в контроллере просто выводим шаблон, в котором в необходимых местах вызываем виджеты.
То же с инфоблоками.
Нравится Yii? Давайте сделаем его лучше!.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Все зависит от самой структуры сайта. Новости можно выводить и с помощью виджетов. Модель в данном случае используется одна, для работы с таблицей новостей. В таблицу новостей добавляется поле, по которому будет идти определение типа новости (новость города или новость компании). Далее в контроллере получаем нужные новости и выводим через виждеты. В принципе, можно обойтись и без виджетов, просто выводить на странице. Это уже зависит от конкретной ситуации.
Twitter: @timlar_ua
-
- Сообщения: 54
- Зарегистрирован: 2010.06.12, 22:18
- Откуда: Набережные Челны
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Мне не ясно, где в виджетах модели . Почему-то мне кажется виджеты сделаны для мелочей типа слайдеров картинок, которые не используют модели.
Ну там разве что что-нибудь простое типа вывода тегов.
Есть ведь ещё модули, или это уже перебор? Где бы посмотреть пример не блога, а новостного сайта на yii
Ну там разве что что-нибудь простое типа вывода тегов.
Есть ведь ещё модули, или это уже перебор? Где бы посмотреть пример не блога, а новостного сайта на yii
Последний раз редактировалось ram0973 2010.08.22, 12:12, всего редактировалось 1 раз.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Примера новостного сайта, к сожалению, нет. Но есть пример того же блога, который очень хорошо объясняет основы работы с контроллерами, моделями и представлениями. Рекомендую ознакомиться, многие вопросы отпадут.
Twitter: @timlar_ua
-
- Сообщения: 54
- Зарегистрирован: 2010.06.12, 22:18
- Откуда: Набережные Челны
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Ну, пример блога я очень хорошо изучил и не один раз И официального, и вот этого http://code.google.com/p/yii-blogdemo-enhanced
И ещё прочитал 3 книжки по Zend, очень похожих по идее на эти блоги, так что мне кажется, я не полный чайник .
Просто хотел узнать как это делают опытные люди, и насчёт модулей и виджетов заодно уточнить.
И ещё прочитал 3 книжки по Zend, очень похожих по идее на эти блоги, так что мне кажется, я не полный чайник .
Просто хотел узнать как это делают опытные люди, и насчёт модулей и виджетов заодно уточнить.
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Зенд здесь абсолютно не при чем. Это совершенно другой фреймворк.
О том, что такое модуль можно почитать здесь: http://yiiframework.ru/doc/guide/ru/basics.module
Виджет, это некий блок, который можно размещать на странице. У виджета есть метод run(), в котором можно работать с любой моделью.
О том, что такое модуль можно почитать здесь: http://yiiframework.ru/doc/guide/ru/basics.module
Виджет, это некий блок, который можно размещать на странице. У виджета есть метод run(), в котором можно работать с любой моделью.
Twitter: @timlar_ua
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Там же в доках есть и определение виджетов (http://yiiframework.ru/doc/guide/ru/basics.view)
Мне ближе в контролере работать с моделями, в виджет только данные для генерации блоков.
Мне ближе в контролере работать с моделями, в виджет только данные для генерации блоков.
Жду Yii 3!
Re: Как правильно делать контроллер для главной страницы
если просто на главной страницк выводить новости, то почему просто не сделать вот так?
Код: Выделить всё
//protected/controllers/SiteController.php
public function actionIndex()
{
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
$limit = 5;
$dataProvider1=new CActiveDataProvider('News', array(
'criteria'=>array(
'condition'=>' city_company=1 ',
'limit'=> $limit,
'order'=>'RAND()', //ну или ASC/DESC
),
'pagination'=>false,
));
$dataProvider2=new CActiveDataProvider('News', array(
'criteria'=>array(
'condition'=>' city_company=2 ',
'limit'=> $limit,
'order'=>'RAND()', //ну или ASC/DESC
),
'pagination'=>false,
));
$this->render('index',
array('dataProvider1'=>$dataProvider1,
'dataProvider2'=>$dataProvider2,
)
);
}
----------------------------------------------------------------------------------------
//protected/views/site/index.php
<h1>Welcome to <i><?php echo CHtml::encode(Yii::app()->name); ?></i></h1>
<h4>City news</h4>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider1,
'itemView'=>'_view',
'ajaxUpdate'=> false,
'enablePagination' => false,
)); ?>
<h4>Company news</h4>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider2,
'itemView'=>'_view',
'ajaxUpdate'=> false,
'enablePagination' => false,
)); ?>
Re: Как правильно делать контроллер для главной страницы
не, так не удобно. нужно помнить "что в этом контроллере вывожу новости" и т.д.omko писал(а):если просто на главной страницк выводить новости, то почему просто не сделать вот так?Код: Выделить всё
//protected/controllers/SiteController.php public function actionIndex() { // renders the view file 'protected/views/site/index.php' // using the default layout 'protected/views/layouts/main.php' $limit = 5; $dataProvider1=new CActiveDataProvider('News', array( 'criteria'=>array( 'condition'=>' city_company=1 ', 'limit'=> $limit, 'order'=>'RAND()', //ну или ASC/DESC ), 'pagination'=>false, )); $dataProvider2=new CActiveDataProvider('News', array( 'criteria'=>array( 'condition'=>' city_company=2 ', 'limit'=> $limit, 'order'=>'RAND()', //ну или ASC/DESC ), 'pagination'=>false, )); $this->render('index', array('dataProvider1'=>$dataProvider1, 'dataProvider2'=>$dataProvider2, ) ); } ---------------------------------------------------------------------------------------- //protected/views/site/index.php <h1>Welcome to <i><?php echo CHtml::encode(Yii::app()->name); ?></i></h1> <h4>City news</h4> <?php $this->widget('zii.widgets.CListView', array( 'dataProvider'=>$dataProvider1, 'itemView'=>'_view', 'ajaxUpdate'=> false, 'enablePagination' => false, )); ?> <h4>Company news</h4> <?php $this->widget('zii.widgets.CListView', array( 'dataProvider'=>$dataProvider2, 'itemView'=>'_view', 'ajaxUpdate'=> false, 'enablePagination' => false, )); ?>
проще использовать виджеты, как написал Sam Dark (viewtopic.php?p=8430#p8430)
в виджете можно сделать какую угодно обработку данных и не захламлять код контроллера.
Re: Как правильно делать контроллер для главной страницы
Есть пример интернет-магазина, где на главной странице выводят "популярные товары" через использования виджета.Timlar писал(а):Примера новостного сайта, к сожалению, нет. Но есть пример того же блога, который очень хорошо объясняет основы работы с контроллерами, моделями и представлениями. Рекомендую ознакомиться, многие вопросы отпадут.
Код контроллера, отвечаюйщий за вывод главной страницы уместился в две строчки:
Код: Выделить всё
public function actionIndex()
{
$this->pageTitle=Yii::app()->params['siteIndexPageTitle'];
$this->render('index');
}
Код: Выделить всё
<!-- popular goods -->
<? $this->widget('application.components.cIndexShop'); ?>
Код: Выделить всё
class cIndexShop extends CWidget
{
public $params=array();
public function init()
{
parent::init();
}
public function run()
{
$indexShop=Yii::app()->cache->get('indexShop'); // ищем в кеше "последние записи"
if($indexShop===false) // в кеше их нет
{
//выбираем все записи, которые относятся к...
$command=Yii::app()->db->createCommand...
$row=$command->queryRow();
if($row)
{
$criteria=new CDbCriteria;
$criteria->condition=...
$indexShop=Items::model()->with('idxCatalog','files')->together()->findAll($criteria);//работаем с моделью Items
Yii::app()->cache->set('indexShop',$indexShop,Yii::app()->params['indexShopCacheTime']);
}
}
$this->render('cvIndexShop',array('indexShop'=>$indexShop));
}
}
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
О том, как лучше - вопрос спорный. Если новости предполагается выводить в одном месте, то совершенно не нужно пихать все это в виджет. Лишняя обработка, ИМХО.
А на счет скрытия/отображения каких-то блоков, то лучше сделать соответствующий параметр в конфиге, который будет отвечать за отображение/скрытие блока. Не нужно будет лазить в код и комментировать.
А на счет скрытия/отображения каких-то блоков, то лучше сделать соответствующий параметр в конфиге, который будет отвечать за отображение/скрытие блока. Не нужно будет лазить в код и комментировать.
Twitter: @timlar_ua
-
- Сообщения: 54
- Зарегистрирован: 2010.06.12, 22:18
- Откуда: Набережные Челны
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
В общем, виджеты наше всё . А модули тогда зачем, простите за глупый вопрос? А может например новости засунуть в модуль, и если надо, на другом сайте можно просто кинуть этот модуль в папку и готово? Не могу понять разницу между модулями и виджетами, причем модули как-то получше кажутся, в них даже лэйауты свои есть, и все файлы M-V-C отдельно. А в виджете, как в этом примере магазина всё как-то в кучу. Это тоже MVC ?
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Модуль, это "приложение в приложении". У модуля есть свои контроллеры, модели, вьюхи. Модуль и виджет - совершенно разные вещи.
ЗЫ. У виджета тоже есть свои представления.
ЗЫ. У виджета тоже есть свои представления.
Twitter: @timlar_ua
- Одиночка Айс
- Сообщения: 267
- Зарегистрирован: 2010.02.05, 10:26
- Откуда: Алма-Ата, Казахстан
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Зачем виждеты то? Запихайте выборку новостей в контроллер и передавайте во вью полученные данные, нафига огороды городить???
Ни любви, ни тоски, ни жалости...
Re: Как правильно делать контроллер для главной страницы
Ага. А если надо новости выводить в другом месте, а не только в "контроллере на главной", ты что, будешь и в том месте "пихать выборку новостей" ?Одиночка Айс писал(а):Зачем виждеты то? Запихайте выборку новостей в контроллер и передавайте во вью полученные данные, нафига огороды городить???
Виджеты - самый простой и правильный путь.
- Одиночка Айс
- Сообщения: 267
- Зарегистрирован: 2010.02.05, 10:26
- Откуда: Алма-Ата, Казахстан
- Контактная информация:
Re: Как правильно делать контроллер для главной страницы
Хм... Резонно )))
Ни любви, ни тоски, ни жалости...