我正在考虑在Wii Framework的CGridView
小部件上显示/隐藏特定列数据。
我有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"
,因为这会删除整个列。我需要针对每一行insposead。
我应该在每个按钮上使用'visible'
参数吗?我已经使用下面注释掉的代码尝试了这个,但它打破了页面。
仅供参考:我已经成功地尝试了“可见的”#39; 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)',
)
)
)
)
)); ?>
希望我在这里有足够的意识!
答案 0 :(得分:1)
您应该使用visible
按钮选项,但它应该是PHP表达式字符串,例如:
'visible'=> '$data->status == "done"',
http://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail
答案 1 :(得分:0)
使用您自己的类扩展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
的更多详细信息