我的要求是显示一个带有添加,编辑,删除选项的下拉列表,其中onchange事件将被重定向到相应的操作。
目前我已经尝试过下面的代码并显示下拉列表,但问题是编辑选项的值未设置为记录的ID。
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'blog-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array('header'=>'Username','name'=>'username', 'value'=>'$data->owner->username'),
array('header'=>'Company','name'=>'company', 'value'=>'$data->owner->company','filter'=>false),
array('header'=>'Blog Title','name'=>'title','filter'=>false),
array('header'=>'Created on','name'=>'created_time','filter'=>false),
array('header'=>'Latest activity','name'=>'updated_time','filter'=>false),
array('header'=>'URL','name'=>'subdomain','filter'=>false),
array('header'=>'Status','name'=>'status','filter'=>false),
array('header'=>'Action','class'=>'CButtonColumn',
'template' => '<select class="actionList" id="actionList" name="actionList">
<option>Choose</option>
<option value="1">Moderate</option>
<option value="$data->id">Edit</option>
<option value="3">Deactivate</option>
<option value="4">Export</option>
<option value="5">Delete</option>
</select>'
),
),
));
答案 0 :(得分:1)
CButtonColumn模板属性的格式应为&#34; {buttonName1} {buttonName2}&#34;一些预定义的按钮,如&#34;更新&#34;,&#34;查看&#34;由cButtonClass提供。
然后,您可以使用buttons数组覆盖或定义每个按钮,该数组的每个元素都可以包含以下元素: -
'buttonID' => array(
'label'=>'...', // text label of the button
'url'=>'...', // a PHP expression for generating the URL of the button
'imageUrl'=>'...', // image URL of the button. If not set or false, a text link is used
'options'=>array(...), // HTML options for the button tag
'click'=>'...', // a JS function o be invoked when the button is clicked
'visible'=>'...', // a PHP expression for determining whether the button is visible
)
听起来好像你需要扩展CButtonColumn类来为button属性添加额外的选项,甚至创建另一个属性。
请参阅:http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview/
和班级定义:http://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail
编辑:
或者,您可以在Javascript中完成所有操作,使用&#34; myDropDown&#34;
等类定义Id列。然后在Javascript / jQuery中处理以下行: -
Yii::app()->clientScript->registerScript('myGridView',"
els=$('.myDropDown);
els.each(function(el) {
cellId=el.text();
var t = $(\"<select id='cellId' class='mySelect'><option value="edit">Edit</option> ... </select>\");
el.html(t);
});
$('table.items .mySelect').live('click', function() {
...process click event
});
", CClientScript::POS_READY);
答案 1 :(得分:1)
为什么要使用CButton列?在简单的专栏中这样做会不会更容易? 例如:
array('header'=>'Action',
'type'=>raw,
'value'=>CHtml::dropDownlist('actionList','',$action,array(
'ajax'=>array(
'type' => 'POST',
'url'=>Yii::app()->createUrl('yourcontroller/action'),
'data'=>array('action'=>'js:this.value'),
'success'=>'function(data){
if (data.redirect!=''){
window.location.href=data.redirect;
}}'
)
这是您在cgridview列中的视图。 在您的控制器操作中:
public function actionAction()
{
switch ($_POST[action]){
case 'Moderate': echo "redirect":"yourcontroller/moderate";break;
/*Your cases here*/
}
}
也许它不是最好的,但它会起作用并做你需要的。欢呼声。
答案 2 :(得分:0)
I got answer to my question. Instead of CButttonColumn I used a simple column. Below is the corrected code.
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'blog-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'selectionChanged'=>'
function(id){
id=$.fn.yiiGridView.getSelection(id);
selected_message_id=id; // this is the value of currently selected row
}',
'columns'=>array(
array('header'=>'Username','name'=>'username', 'value'=>'$data->owner->username'),
array('header'=>'Company','name'=>'company', 'value'=>'$data->owner->company','filter'=>false),
array('header'=>'Blog Title','name'=>'title','filter'=>false),
array('header'=>'Created on','name'=>'created_time','filter'=>false),
array('header'=>'Latest activity','name'=>'updated_time','filter'=>false),
array('header'=>'URL','name'=>'subdomain','filter'=>false),
array('header'=>'Status','name'=>'status','filter'=>false),
array( 'header'=>'Action','type'=>'raw',
'value'=>'\'
<select class="actionList" id="actionList" name="actionList">
<option>Choose</option>
<option value="1">Moderate</option>
<option value="\'.$data->id.\'">Edit</option>
<option value="3">Deactivate</option>
<option value="4">Export</option>
<option value="5">Delete</option>
</select>\'',
),
),
));