Как поместить контрастную информацию в столбец 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" для столбца, потому что это удалит весь столбец. Мне нужно настроить таргетинг на каждую строку insatead.

Должен ли я использовать параметр '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)',
                )
            )
        )
    )
)); ?>

Надеюсь, я достаточно хорошо понимаю здесь!


person Patrick Keane    schedule 11.03.2014    source источник


Ответы (2)


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

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

http://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail

person soju    schedule 11.03.2014

Расширьте 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#renderButton-detail

person Mihai P.    schedule 11.03.2014