Cactivedataprovider I Clistview - Podział Na Strony

Witam,

Mam pewien problem związany z wysłaniem obiektu CActiveDataProvider do CListView i podziału wyników na strony.


            $dataProvider=new CActiveDataProvider('Product', array(

                    'criteria'=>array(

                        'with'=>array('...'),

                        'join'=>'INNER JOIN ...,

                        'order'=>'t.sort_order ASC',

                        'condition'=>'...',

                        'together'=>true,

                    ),

            ));

W widoku ustawiam sobie rozmiar strony i wyświetlam wyniki korzystając z widgetu CListView


        $dataProvider->pagination->pageSize=15;

        

        $this->widget('zii.widgets.CListView', array(

            'dataProvider'=>$dataProvider,

            'itemView'=>'_view',

            'enablePagination'=>true,

        )); 

W konkretnym przypadku CADP zwraca 15 wyników. PageSize również jest ustawiony na 15. I co otrzymuję? Otrzymuję wyświetlone 6 wyników z napisem u góry ‘Wyświetlono rezultaty 1-6 z 15.’ Wszystko fajnie ale na dole nie mam paska paginacji.

Dopiero ustawiając pageSize na wartość poniżej 15 pojawia się pasek paginacji, całkiem sensowne.

Teraz ustawiając przykładową wartość 10, otrzymuję… 5 wyników. No świetnie, to chociaż poprzeglądam to sobie z pomocą paska paginacji - a tu nie ma tak łatwo! Są tylko dwie strony, z czego pierwsza pokazuje 1-5 z 15 a druga nagle 11-14 z 15.

Jak to skonfigurować żeby działało poprawnie?

Pozdrawiam.

spróbuj usunąć order i zobaczyć co się stanie :>

Czasem miałem takie problemy przy wykorzystywaniu JOIN (więcej niż jeden). Wywal najpierw ‘with’=>’’ i zobacz czy będzie dobrze wyświetlało. Jeśli tak, to będziesz wiedział gdzie szukać problemu.

W przykładzie z Yii API doc:


$dataProvider=new CActiveDataProvider('Post', array(

    'criteria'=>array(

        'condition'=>'status=1',

        'order'=>'create_time DESC',

        'with'=>array('author'),

    ),

    'pagination'=>array(

        'pageSize'=>20,

    ),

));



paginacja jest ustawiana w momencie tworzenia obiektu, być może obiekt głupieje po tym, jak zmieniasz ją później? Strzelam, ale życie uczy, aby kopiować przykłady jota w jotę i w razie konieczności zmieniać małymi krokami.

Dodatkowo o ile pamiętam, to od wersji 1.13 nie zaleca się stosowania aliasu t w zapytaniach, trzeba go pobrać odpowiednią metodą.

Możesz doprecyzować?

Wpadł mi w oko fragment z pliku UPGRADE:

The main problem here is that you can not use the t-alias for your table anymore, you have to change your code to use the table alias currently in use as this is different in relational context. You can get that alias by calling $this->getTableAlias(); in your active record class or $this->owner->getTableAlias() in behavior context.

Example:


$criteria->condition = 't.myfield = 1';

You need to change that to:




$alias = $this->owner->getTableAlias();

$criteria->condition = $alias.'.myfield = 1';