我正在尝试使用 CArrayDataProvider
在 CGridView
上进行分页(我的 $rawData
是一个自定义数组 - 不是来自数据库/模型)。
因此,在 Controller 的操作 a 中具有以下内容:
$form = new SearchUser;//here I have SearchUser form that extends CFormModel with the following attributes: 'id', 'name', 'surname', 'phone', 'address'
$users = array();
if (isset($_POST['SearchUser'])) {
....//prepare users array from my custom source-> not from DB/models etc
}
$dataProvider=new CArrayDataProvider($users, array(
'id'=>'id',
'keys'=>array('name', 'surname', 'phone', 'address'),
'sort'=>array(
'attributes'=>array(
'name', 'surname', 'phone', 'address'
),
),
'pagination'=>array(
'pageSize'=>15,
),
));
并且:
$this->render('index', array('dataProvider'=>$dataProvider, 'form'=>$form));
在index.php我有:
...
<?php echo CHtml::link('Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
'model'=>$form,
)); ?>
</div><!-- search-form -->
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name' => 'Name',
'type' => 'raw',
'value' => 'CHtml::encode(@$data["name"])'
),
array(
'name' => 'Surname',
'type' => 'raw',
'value' => 'CHtml::encode(@$data["surname"])'
),/*
array(
'name' => 'Phone',
'type' => 'raw',
'value' => 'CHtml::encode(@$data["phone"])'
),*/
array(
'name' => 'Address',
'type' => 'raw',
'value' => 'CHtml::encode(@$data["address"])'
),
),
'enablePagination'=> true,
));
第一页显示正确,但当我选择另一个页面时,我的过滤器丢失,所有数据都显示在网格中,而不是“过滤后”的数据。
最佳答案
不确定它能否解决您的问题,但在您的 CArrayDataProvider 中,您使用 id
来定义键字段的名称,而不是 keyField
。
您可以尝试以下操作:
$dataProvider=new CArrayDataProvider($users, array(
'id'=>'users',
'keyField' => 'id',
'keys'=>array('id','name', 'surname', 'phone', 'address'),
'sort'=>array(
'attributes'=>array(
'name', 'surname', 'phone', 'address'
),
),
'pagination'=>array(
'pageSize'=>15,
),
));
关于php - CArrayDataProvider 与 CGridView 分页 Yii,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082568/