код моделей
Код: Выделить всё
public function getTreeviewData()
{
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM Category');
$categorys = $this->cache(Yii::app()->params->cacheTime, $dependency)->with('children')->findAllByAttributes(['parent_id' => 0]);
$data = [];
foreach ($categorys as $category) {
$children = [];
foreach($category->children as $child) {
$children[] = [
'text' => CHtml::link($child->name, ['category/index', 'code'=>$child->code]),
];
}
$data[] = [
'text' => CHtml::link($category->name, ['category/index', 'code'=>$category->code]),
'children' => $children
];
}
return $data;
}
public function getList($code = null)
{
$criteria = new CDbCriteria();
$criteria->with = ['category', 'categorys'];
$criteria->together = true;
$criteria->condition = 't.paid = 1 AND t.active = 1 AND t.expiry_date > NOW()';
$criteria->order = 't.seo2 DESC, t.seo1 DESC, t.expiry_date DESC';
$criteria2 = new CDbCriteria;
$criteria2->compare('categorys.code', $code);
$criteria2->compare('category.code', $code, false, 'OR');
$criteria->mergeWith($criteria2);
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM Advert');
$dataProvider = new CActiveDataProvider($this->cache(Yii::app()->params->cacheTime, $dependency, 2), [
'criteria'=>$criteria
]);
return $dataProvider;
}
Код: Выделить всё
public function actionIndex($code = null)
{
$this->layout = 'column1';
$this->render('index', [
'category' => Category::model()->getCached($code),
'dataProvider'=>Advert::model()->getList($code)
]);
}
Код: Выделить всё
<?php
/* @var $this CategoryController */
/* @var $dataProvider CActiveDataProvider */
$this->pageTitle = Yii::app()->name;
?>
<h1><?= isset($category) ? $category->name : '' ?></h1>
<div class="span-5">
<?php $this->widget('CTreeView', [
'data'=>Category::model()->getTreeviewData(),
'collapsed'=>true,
'persist'=>'location',
]) ?>
</div>
<div class="span-15 ">
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'/advert/_view',
)); ?>
</div>
если же вызвать так
Код: Выделить всё
<div class="span-15 ">
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'/advert/_view',
)); ?>
</div>
<div class="span-5">
<?php $this->widget('CTreeView', [
'data'=>Category::model()->getTreeviewData(),
'collapsed'=>true,
'persist'=>'location',
]) ?>
</div>
или если вызвать так, тоже кеширует
Код: Выделить всё
<div class="span-15 ">
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>Advert::model()->getList(),
'itemView'=>'/advert/_view',
)); ?>
</div>