CArrayDataProvider в CGridView - нет IDшников у CButtonColum

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
enshtein
Сообщения: 65
Зарегистрирован: 2012.02.20, 19:02

CArrayDataProvider в CGridView - нет IDшников у CButtonColum

Сообщение enshtein »

В моей модели Menu есть такой метод:

Код: Выделить всё

class Menu extends CActiveRecord
{
    public function tree()
    {
        $rows = Yii::app()->db->createCommand('SELECT * FROM {{menu}}')->queryAll();
        if (count($rows)) {
            foreach ($rows as $row) {
                $data[$row['id']] = $row;
            }
        }
        return new CArrayDataProvider($data, array(
            'keyField' => 'id',
            'sort'=>array(
                'attributes'=>array(
                     'ordering', 'id', 'name',
                ),
            ),
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));        
    }
}
далее в контроллере MenuController :

Код: Выделить всё

class MenuController extends Controller
{
        public function actionAdmin()
    {
        $model=new Menu('tree');
        $this->render('admin',array(
            'model'=>$model,
        ));
    }
}
ну и наконец, в представлении есть виджет CGridView:

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'menu-grid',
    'dataProvider'=> $model->tree(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        'parent_id',
        'menu',
        'name',
        'alias',
        'link',
        /*
        'published',
        'params',
        */
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>
в итоге все данные выводятся верно, но у кнопок (CButtonColumn): Просмотр, редактировать, Удалить нет ID-шников в ссылках.
В исходном массиве $data конечно же есть элементы с ключом id, более того я специально прописал 'keyField' => 'id', но что-то ничего не помогает.
Аватара пользователя
Ghost_nsk
Сообщения: 825
Зарегистрирован: 2012.01.01, 00:45
Откуда: Новосибирск
Контактная информация:

Re: CArrayDataProvider в CGridView - нет IDшников у CButtonC

Сообщение Ghost_nsk »

у CButtonColumn есть пара свойств: deleteButtonUrl, updateButtonUrl, viewButtonUrl.
Попробуй их юзани :)
wolandino
Сообщения: 103
Зарегистрирован: 2011.02.02, 20:03

Re: CArrayDataProvider в CGridView - нет IDшников у CButtonC

Сообщение wolandino »

Как в data указаны id-шники, когда смотрите var_dump`ом?
Просто интереса ради посмотрел у себя:
Контроллер

Код: Выделить всё

		$dataProvider = new CActiveDataProvider('Tyre', array(
                  'pagination' => array('pageSize' => 10),
              ));
              $this->render('test', array('dataProvider' => $dataProvider));
Представление:

Код: Выделить всё

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'menu-grid',
    'dataProvider'=> $dataProvider,
    'columns'=>array(
        'tyre_id',
        'shirina',
        'profile',
        'diam',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>
Все ссылочки на месте :)
Вам принципиально формировать датапровайдер как у вас через модель? Есть у меня подозрение, что косяк из-за этого.

Код: Выделить всё

foreach ($rows as $row) {
                $data[$row['id']] = $row;
            }
Попробуйте данные в датапровайдер засунуть как у меня и посмотреть результат.
Ответить