Как поместить контрастную информацию в столбец CGridView на основе условия?

Я смотрю на показ / скрытие определенных данных столбца на CGridView виджет для Wii Framework.

у меня есть CButtonColumn который содержит 3 кнопки. Однако при определенных условиях я хочу отобразить что-то другое для конкретной строки. У меня есть 3 различных условия, которые определяют, что отображается для определенного ряда.

Ниже показано, что я хочу сделать:

| 1 | Title A | [hide][view][update]            <-- if (condition == 'a')
| 2 | Title B | [hide][view][update]            <-- if (condition == 'a')
| 3 | Title C | display text or link or button  <-- if (condition == 'b')
| 4 | Title D | display alternative buttons     <-- if (condition == 'c')

Какой мой лучший подход, чтобы взять здесь?

Я не могу использовать 'visible'=> $model->processingStatus != "processed" на столбце, потому что это удалит весь столбец. Мне нужно нацелиться на каждый ряд.

Должен ли я использовать 'visible' параметр на каждой отдельной кнопке? Я пробовал это, используя закомментированный код ниже, но это ломает страницу. К вашему сведению: я успешно попробовал параметр "visible" на самом CButtonColumn, но это не то, что мне нужно. Плюс не уверен, какой статус строки он читает.

Или я должен добавить функцию в контроллер? Пусть он выполнит оператор if/else и вернет обратно то, что должно отображаться. Как это будет работать?

Вот мой код:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'my-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(

        array(
            'name'=>'myid',
            'header'=>'ID',
            ),

        'Title',

        array(
            'class'=>'CButtonColumn',
            'visible'=> $model->status != "done",
            'template'=>'{hide}{view}{update}',
            'buttons'=>array(
                'hide'=>array(
                    'label'=>'Hide',                                                    //Text label of the button.
                    'imageUrl'=>Yii::app()->request->baseUrl . '/img/icons/bulb-off.png'    //Image URL of the button.
                    //'click'=>'function(){alert("Toggle Hide!");}',                    //A JS function to be invoked when the button is clicked.
                    //'options'=>array(),               //HTML options for the button tag.
                    //'url'=>'javascript:void(0)',              //A PHP expression for generating the URL of the button.
                    //'visible'=> $model->status == "done",     //A PHP expression for determining whether the button is visible.
                ),
                'view'=>array(
                    //Text label of the button.
                    'label'=>'View',
                    //Image URL of the button.
                    'imageUrl'=>Yii::app()->request->baseUrl . '/img/icons/view-record.png'
                ),
                'update'=>array(
                    'label'=>'Update/Edit',
                    'imageUrl'=>Yii::app()->request->baseUrl . '/img/icons/edit-pencil.png',
                    'url'=>'Yii::app()->createUrl("metadataandchapters/create?bookid=" . $data->bookid)',
                )
            )
        )
    )
)); ?>

Надеюсь, у меня есть достаточно смысла здесь!

2 ответа

Вы должны использовать visible опция кнопки, но это должна быть строка выражения PHP, например:

'visible'=> '$data->status == "done"',

http://www.yiiframework.com/doc/api/1.1/CButtonColumn

Расширьте CButtonColumn своим собственным классом, и тогда вы сможете изменить эту функцию на любую необходимую вам для рендеринга или скрытия кнопок или внесения любых изменений, которые вы захотите.

/**
 * Renders a link button.
 * @param string $id the ID of the button
 * @param array $button the button configuration which may contain 'label', 'url', 'data-icon', 'imageUrl' and 'options' elements.
 * @param integer $row the row number (zero-based)
 * @param mixed $data the data object associated with the row
 */
protected function renderButton($id, $button, $row, $data)

Подробнее о функции http://www.yiiframework.com/doc/api/1.1/CButtonColumn

Другие вопросы по тегам