CArrayDataProvider с разбиением на страницы CGridView Yii

Я пытаюсь сделать разбиение на страницы на CGridView с помощью CArrayDataProvider (мой $rawData – это настраиваемый массив, а не DB / model). Итак, в действии контроллера есть следующее:

 $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, )); 

Первая страница отображается правильно, но когда я выбираю другую страницу, мой фильтр теряется, и все данные отображаются в сетке вместо «фильтрованных».

Solutions Collecting From Web of "CArrayDataProvider с разбиением на страницы CGridView Yii"

Не уверен, что это решит вашу проблему, но в вашем 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, ), )); 

Пользователи Модель:

  public function getAllList(){ $sql = "SELECT * FROM users"; $cmd = Yii::app()->db->createCommand($sql); return $cmd->queryAll(); } 

Контроллер пользователей:

  public function actionIndex(){ $model = Users::model()->getAllList(); $dataProvider = new ArrayDataProvider($model, array( 'keyField' => 'user_id', 'pagination' => array( 'pageSize' => 5, ), ) ); $this->render('index',array( 'dataProvider' => $dataProvider, ) ); } 

Пользователи Просмотров:

 index.php $this->widget('zii.widgets.CListView', array( 'ajaxUpdate' => true, 'dataProvider' => $dataProvider, 'itemView' => '_view', // refers to the partial view named '_carList' 'template' => '<h4><span>{summary}</span></h4>{items}{summary}{pager}', 'pagerCssClass' => 'pagination', 'summaryText' => '{start}-{end} of {count} Total Property ', 'pager' => array( 'header' => FALSE, 'firstPageLabel' => FALSE, 'lastPageLabel' => FALSE, 'nextPageLabel' => 'Next', 'prevPageLabel' => 'Previous', 'selectedPageCssClass' => 'active', 'maxButtonCount' => '5' ), 'beforeAjaxUpdate' => 'function(){ //todo before }', 'afterAjaxUpdate' => 'function(){ //todo after }', )); _view.php <p> <?php echo $data['user_id']; ?> <?php echo $data['user_name']; ?> <?php echo $data['user_pass']; ?> </p>