Для понимания.
На главной странице есть два блока, пусть новости.
В одном блоке нужно вывести два блока новостей (последних), во втором блоке необходимо вывести шесть блоков.
При переходе на вкладку НОВОСИ, т.е. main/news/index получить шесть блоков.
Понимаю, что для этой цели в проекте исользован CPagination.
Что нам говорит документация:
CPagination представляет информацию, относящуюся к разбивке на страницы. Когда данные должны отображаться на нескольких страницах, мы можем использовать CPagination для представления информации, такой как общее количество элементов, размер страницы, текущая страница и т. Д. Эти данные могут передаваться пейджерам для отображения кнопок или ссылок страниц.
Я рассуждал так, поправьте меня если я не прав, Добавляем в News.php function в которой создаем новое правило :
- Код: Выделить всё
public function getPageSize($inCriteria = null){
if ($inCriteria === null){
$criteria = new CDbCriteria;
$criteria -> addCondition('active = 1');
$criteria -> order = 'date_created DESC';
} else {
$criteria = $inCriteria;
}
$page = new CPagination($this->count($criteria));
$page -> pageSize = param('modele_news_itemsPage',10);
$page -> applyLimit($criteria);
$item = $this->findAll($criteria);
return array(
'item' => $item,
'page' => $page,
);
}
В базе данных в таблице configuration создаем новую переменную modele_news_itemsPage задаем ему значение оличное от переменной modele_news_itemsPerPage.
В папке news/components создаем файл виджета, предположим NewsNewWidget.
С содержимым:
- Код: Выделить всё
class NewsNewWidget extends CWidget
{
public $usePagination = 1;
public function getViewPath($checkTheme=false){
return Yii::getPathOfAlias('application.modules.news.views');
}
public function run() {
$news = new News;
$criteria = new CDbCriteria;
$criteria->addCondition('active = 1');
$criteria->order = 'date_created DESC';
$result = $news->getPageSize($criteria);
$this->render('widgetNews_table', array(
'news' => $result['item'],
'page' => $result['page'],
));
}
}
Соответственно раз мы рендерим файл widgetNews_table, создаем в папке views файл widgetNews_table.
С нужным нам контентом.
Ну и как результат выводим в site/index:
- Код: Выделить всё
<div class="col-6 col-lg-6 col-xs-12">
<!-- Catalog два предыдущие -->
<?php Yii::import('application.modules.news.components.*');
$this->widget('NewsWidget');
?>
</div>....
<hr>
<div class="container">
<?php Yii::import('application.modules.news.components.*');
$this->widget('NewsNewWidget');
?>
</div>
<hr>
По моему замыслу мы должны получит два разных представления, но результат получается по последнему правилу, первое опускается.
И в обоих блоках я получаю одинаковый результат ( вижу 6 блоков, а нужно в первом 2, во втором 6).
Подскажите если не трудно.
Если я что то неправильно понимаю, подскажите, в какую сторону копать?