6

CActiveDataProvider から供給される単純な CGridView があります。現時点では、これがどのくらいの期間発生しているかはわかりませんが、ページネーションが有効になっているビューにすべてのデータ項目が表示されているわけではありません。

ヘッダーに「9 件中 1 ~ 7 件を表示しています」と表示されていますが、ページを増やすためのボタンがありません。データ プロバイダーの pagenation プロパティの pageSize を小さい値に設定すると、最終的にはページング ボタンが表示されますが、最初のページに表示される項目は 2 ページ目よりも少ないようです。たとえば、CActiveDataProvider の pageSize を 3 に設定すると、予想どおり 3,3,1 ではなく 2,2,3 (各ページの項目) が得られます。

pageSize を 9 から 11 までの範囲に設定すると、1 ページしか表示されず、すべての項目が表示されないため、表示できない項目があります (pageSize を 9 に設定すると、「1-6 of 9」)。

$criteria=new CDbCriteria;
$criteria->with = array('registrations'); 
$criteria->addCondition('registrations.id IS NOT NULL');
$criteria->addCondition('registered = false');
$criteria->together = true;
$dataProvider = new CActiveDataProvider('Skier', array('criteria'=>$criteria));

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array('name'=>'fullname', 'header'=>'Name'),
        array(
            'name'=>'programs_names',
            'header'=>'Programs',
            'value'=>'$data->programs_names',
        ),
        <More items here>
    )
));

ページネーションが不安定になる原因を知っている人はいますか?

編集: また、CActiveDataProvider を CArrayDataProvider に変更すると正しく機能し、9 件中 9 件の結果が得られます。データセットが小さいため、これで今のところは問題ありませんが、何が問題なのかを突き止めたいと思います。

$dataProvider = new CArrayDataProvider(Skier::model()->findAll($criteria));
4

5 に答える 5

1

私は入れなければなりません$criteria->withでしtogether=trueif()

if( (int) $this->categoria_id > 0) {
    $criteria->with = Array (
        'categorie'=> Array (
            'together' => true,
        )
    );
    $criteria->compare ('categorie.id', $this->categoria_id);
}

それ以外の場合、パラメーターが渡されずにCActiveDataProviderのページネーションがtogether=true間違ったカウントを返します。

于 2016-04-02T10:28:22.633 に答える
0

正確にすべてのレコードを表示するには、「count rows」を実行してから、「supply $countResult to pageSize」を実行します。たとえば、

最初に行を数えます (これは例です, 'User' = 'your model name') )

$countResult = User::model()->countByAttributes(array('record_name' => $matched_record_name));

また

$countResult = User::model()->count($condition);

そして、$countResult を pageSize に指定します

            'pagination'=>array(
                'pageSize' => intval($countResult),
                )), 
于 2016-02-17T00:39:55.017 に答える