2010-12-30 15 views
9

Tablodan birkaç satır seçmeye ve onu birden çok sayfaya (sayfalara ayırma) dönüştürmeye çalışıyorum.yii Sınır ve sayfalandırma ile 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 kullanarak bunu göstermek görünümünde:: Bu modelde bir koddur

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

sorun CActiveDataProvider kriterlerinin sınırını yok sayar ve tablonun tüm satırları döndüren olmasıdır ...

Teşekkürler.

+0

$ dataProvider, CActiveDataProvider nesnesini içerir mi? –

+0

Evet, buradan Kontrolörün kodunu yayınlamadım ... – Savash

cevap

7

Olumlu değilim ... ama Yii, SQL sonuç sayfalandırma yapmak için LIMIT yan tümcesini kullanır, bu nedenle LIMIT yan tümcesini üzerine yazar/değiştirir. SQL'in yürütülmekte olduğunu tam olarak görmek için CWebLogRoute günlük rotasını açarak bunu kontrol edebilirsiniz. Her neyse, bunun nasıl çalışması gerektiğinden emin değilim. Eklediğiniz LIMIT yan tümcesi nedir? Yine de, paginasyonu yapıyorsanız, kullanıcının tüm kayıtlara neden izin vermesine izin vermiyorsunuz? Çözüm muhtemelen LIMIT deyiminden kurtulmak için ölçütlerinizi değiştirmektir.

Sayfa başına sonuç sayısını ayarlamaya çalışıyor musunuz? Halihazırda pageSize 5'e ayarlanmış olsa da ...

İstediğinizi yapabileceğiniz başka bir şey de Temel Çağrı sınıfına, CPagination'a göz atmaktır. CLinkPager ile, CGridView ile kullandığınız CListPager'dan daha yaratıcı bir şekilde sayfa açmanıza izin verebilir.

İyi şanslar!

+0

Teşekkürler! .... – Savash

2

Veri sağlayıcısının temel özelliklerinden biri, yapılandırmadaki "totalItemCount" ifadesini belirterek satırların miktarını hesaplamayı geçersiz kılabilirsiniz. Normalde (ben bunu test etmedim) bu da ActiveDataProvider için çalışır:

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

Ben aynı sorunu vardı ve şöyle bir çözüm buldu:

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

ve sayfalandırma gizlidir için CGridView set :

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