我有一个搜索表单,它会返回一堆图像。因为它们的数量可能很高,我宁愿使用分页显示结果。但是,我似乎无法让它正常工作。我已将所有内容移至视图中,以使事情尽可能简单。
以下是我的搜索和分页代码段:
$searchData = $model->search(); // this is the result of the search
$pages = new CPagination($searchData->itemCount);
$searchData->setPagination($pages);
$pages->applyLimit($searchData->criteria);
$pages->pageSize = 2;
然后,我使用“foreach”语句显示结果:
foreach($searchData->getData() as $data)
{
// results displayed here
}
最后,我有了CLinkPager小部件:
$this->widget('CLinkPager', array(
'pages' => $pages,
'header' => 'Отиди на страница: ',
'nextPageLabel' => 'Следваща',
'prevPageLabel' => 'Предишна',
)); `
问题是:窗口小部件与显示的结果之间没有关系。 例如,如果我得到4个结果,则窗口小部件正确显示有2个页面。但是,结果不会显示在两个页面中,所有都显示在一个页面中,单击CLinkPager链接不会执行任何操作。
我以前成功地完成了分页,但是对于所有使用的数据 模型() - >的findAll()。
如何说明分页小部件和搜索结果之间的关系......?
感谢您的时间。
答案 0 :(得分:2)
我认为你可能会使这个过程过于复杂。您可以更轻松地使用CListView小部件以分页方式显示结果。
你的控制器可能有这个;
public function actionIndex(){
$model = new Model;
$this->render('index', array('model' => $model);
}
您的模型需要有一个返回CActiveDataProvider实例的搜索方法,例如
public function search() {
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id, true);
$criteria->compare('title', $this->title, true);
$criteria->order = 'sortOrder';
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
然后在您的视图文件中,您可以使用此代码;
$this->widget('widgets.CListView', array(
'dataProvider' => $model->search(),
'itemView' => '_list',
'template' => '{pager}{items}',
'pager' => array(
'nextPageLabel' => 'Следваща',
'prevPageLabel' => 'Предишна',
)
));
答案 1 :(得分:0)
您可以通过将此文件放在您的扩展文件夹中来扩展CListView,并在那里更改页面大小。
<?php
Yii::import('zii.widgets.CListView');
class CustomListView extends CListView {
public function init() {
if ($this->dataProvider !== null)
$this->dataProvider->pagination->pageSize = 30;
$this->dataProvider->pagination->nextPageLabel => 'Следваща';
$this->dataProvider->pagination->prevPageLabel => 'Предишна';
parent::init();
}
}
然后,使用CustomListView,如下所示:
<?php $this->widget('CustomListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>
您不需要以这种方式直接使用CLinkPager
小部件。