2010-12-30 11 views
9

テーブルからいくつかの行を選択し、複数のページ(ページ番号)でレンダリングしようとしています。yii CActiveDataProvider(制限とページングあり)

return new CActiveDataProvider('Downloads', 
     array(
      'criteria' => array(
       'select' => 'download_id,title,thumb_ext', 
       'order' => 'download_id DESC', 
       'limit' => $count, 
      ), 
      'pagination' => array('pageSize' => 5,), 
     ) 
    ); 

CGridViewを使用して、私はそれを表示するビューで: これは、モデル内のコードである

$this->widget('zii.widgets.grid.CGridView', array(
     'dataProvider'=>$dataProvider, 
     'columns' => array('download_id', 'title', 'thumb_ext'), 
    )); 

問題はCActiveDataProviderが基準の制限を無視し、テーブルのすべての行を返すということですが...

ありがとうございました。

+0

$ dataProviderにはCActiveDataProviderオブジェクトが含まれていますか? –

+0

はい、私はコントローラのコードを投稿しませんでした... – Savash

答えて

7

私は肯定的ではありませんが、YiiはLIMIT句を使用してSQL結果のページ付けを行うため、LIMIT句を上書き/置き換えます。 CWebLogRouteログ・ルートをオンにして、どのSQLが実行されているかを正確に確認することでこれを確認できます。

とにかく、これがどのように動作するはずです。あなたが追加したLIMIT節は何ですか?とにかく改ページしている場合は、ユーザーがすべてのレコードを改ページしてみましょう。 解決策はおそらくLIMIT句を取り除くための基準を変更することです。

1ページあたりの結果数を設定しようとしていますか?あなたはすでにpageSizeが5に設定されていますが...

それを試してみると、基本的なページャクラス、CPaginationをチェックすることです。 CLinkPagerを使用すると、CGridViewで使用しているCListPagerよりも、より創造的に改ページできるようになります。

幸運を祈る!

+0

ありがとう!.... – Savash

2

データプロバイダの基本機能の1つは、config内にtotalItemCountを指定することによって、行の量の計算をオーバーライドできることです。通常、(私はそれをテストしていない)、これはまたActiveDataProviderのために働く:

return new CActiveDataProvider('Downloads', 
     array(
      'criteria' => array(
       'select' => 'download_id,title,thumb_ext', 
       'order' => 'download_id DESC', 
      ), 
      'pagination' => array('pageSize' => 5,), 
      'totalItemCount' => $count, 
     ) 
    ); 
5

私は同じ問題を抱えていたし、次のように私は解決策を見つけた:

return new CActiveDataProvider('Downloads', 
    array(
     'criteria' => array(
      'select' => 'download_id,title,thumb_ext', 
      'order' => 'download_id DESC', 
     ), 
     'pagination' => array('pageSize' => 5,), 
     'totalItemCount' => $count, 
    ) 
); 

とページネーションにCGridView設定が隠されています:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider, 
    'enablePagination' => false, 
    'columns' => array('download_id', 'title', 'thumb_ext'), 
)); 
関連する問題