2013-04-18 84 views
1

我試圖做使用CArrayDataProvider(我的$rawData是一個自定義數組 - 不是從數據庫/模型)分頁。 所以,在controller`s行動有以下幾種:CArrayDataProvider與CGridView分頁Yii

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

第一頁顯示正確但是當我選擇另一個頁面時,我的過濾器將丟失,並且所有數據都將顯示在網格中,而不是「已過濾」的數據。

+0

在您的網址你有'頁= ...'? – darkheir

+0

我有這樣的:&id_page = 2 – Larry

回答

0

不知道它會解決您的問題,但在您的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, 
    ), 
)); 
+1

不工作.. :( – Larry

+1

的祕密是keyField.thanks – Larry

+0

CArrayDataProvider沒有實現分頁和排序方法,所以你需要根據你的實現來實現它們 –

0

用戶型號:

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>