[Yii] CActiveDataProvider, $data и pagination

Yii

Задача: есть CActiveRecord A, у которой есть несколько CActiveRecord B («один-ко-многим»). Необходимо сделать Grid (CGridView) с постраничной навигацией, в котором вывести данные по моделям B.

Сразу скажу, что сделать это с использованием CActiveDataProvider не получится. Если в нем явно указать $data, то накроется медным тазом навигация. Начиная с того, что total results будет равен количеству всех моделей B вообще (а не тех, которые относятся к А) и заканчивая тем, что выведутся на страницу все В, которые относятся к А, а не то количество, указанное в pageSize.

Придется использовать CArrayDataProvider. Пример кода:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => new CArrayDataProvider(
        $modelA->array_of_B,
        array(
            'keyField' => 'some_field',
            'pagination'=>array(
                'pageSize'=>10,
            ),
            'totalItemCount' => count($modelA->array_of_B)
        )
    ),
    'columns'=>array(
        ..........
    )
));

В качестве данных для CGridView передается $modelA->array_of_B, размер страницы указан равным 10, а общее количество записей берется через count(). Таким образом, на странице будет таблица с постраничной навигацией по 10 записей на странице. Решено.

,

Оставить комментарий

Top ↑ | Main page | Back