Создать пользовательский столбец с пользовательскими кнопками?
Q: как создать пользовательский столбец с пользовательскими кнопками?
Я хочу создать вид сетки с помощью cgridview следующим образом. Как я могу сделать?
Название компании | заголовок 1.1 | заголовок 1.2 | заголовок 2.1 | заголовок 2.2 | заголовок 3.1 | заголовок 3.2
AAAA1 | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [Кнопка]
BBBB1 | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [Кнопка]
CCCC1 | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [кнопка] | [Кнопка]
================================================== ================================ Обновление
Это мой код cgridview
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'customer-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'customer_name',
array(
'class'=>'CButtonColumn',
'template'=>'{select1} {select2} {select3} {select4} {select5} {select6} {select7} {select8}',
'buttons'=>array
(
'select1' => array
(
'label'=>'Send an e-mail to this user',
'url'=>'Yii::app()->createUrl("job/getjobno", array("c_code"=>$data->c_code))',
'imageUrl'=>Yii::app()->request->baseUrl.'/protected/assets/images/gridview/icon_select.gif',
'options'=>array('style'=>'width:10px; border:none'),
'click'=>'function(event) {
$.ajax({
url:$(this).attr("href"),
dataType: \'json\',
success: function(data){
//alert(data.newjobno);
$("#Job_name").val(data.newjobno);
//console.log(\'target tr: \' + target);
//$(target).find(\'.item-price\').val(data.newjobno);
$("#customerlist").dialog("close");
}
});
event.preventDefault();
}',
),
),
),
array(
'type'=>'raw',
'value'=>'$data->c_code',
//'filter'=>array('style'=>'visible:none'),
'headerHtmlOptions'=>array('style'=>'width:0px; display:none; border:none; textdecoration:none'),
'htmlOptions'=>array('style'=>'display:none; border:none;', 'class'=>'customer-id'),
'header'=>false,
'filter'=>false,
),
),
)); ?>
1 ответ
Вы почти поняли это правильно. Просто, чтобы вам понадобилось больше кнопок колонок, используйте правильные template
для каждого столбца и укажите buttons
для каждого столбца правильно:
'columns'=>array(
'customer_name',
array(
'header'=>'Header 1.1', // add headers this way
'class'=>'CButtonColumn',
'template'=>'{select1}', // only 1 button
'buttons'=>array
(
'select1' => array
(
// ... options for select1 button
),
),
),
array(
'header'=>'Header 1.2', // add headers this way
'class'=>'CButtonColumn',
'template'=>'{select2}', // only 1 button
'buttons'=>array
(
'select2' => array
(
// ... options for select2 button
),
),
),
// ... and so on add the other button columns ...
// ... rest of columns ...
),
Если вы хотите, чтобы все кнопки были в 1 столбце, вам просто нужно добавить параметры кнопок в buttons
имущество:
'columns'=>array(
'customer_name',
array(
'class'=>'CButtonColumn',
'template'=>'{select1}{select2}{select3}', // only 1 button
'buttons'=>array
(
'select1' => array
(
// ... options for select1 button
),
'select2' => array
(
// ... options for select2 button
),
'select3' => array
(
// ... options for select3 button
),
// ... and so on add the other button options ...
),
),
// ... rest of columns ...
),
Обновление: Просто запомните, какую бы кнопку вы не упомянули в template
используйте этот buttonId, чтобы указать параметры кнопки:
'class'=>'CButtonColumn',
'template'=>'{buttonId1}{buttonId2}',
'buttons'=> array(
'buttonId1'=>array(
// ... options ...
),
'buttonId2'=>array(
// ... options ...
)
)