Yii bootstrap + виджет TbButtonColumn + виджет TbButtonGroup
Yii bootstrap + виджет TbButtonColumn + виджет TbButtonGroup
столкнулся с такой проблемой:
таблица формируется виджетом TbGridView из bootstrap (от yii-booster). В столбце TbButtonColumn я формирую " редактировать / удалять и т. д."
но одна кнопка, которую я хочу сделать с эффектом разделения выпадающих списков http://yii-booster.clevertech.biz/components.html#buttonDropdowns
$this->widget('bootstrap.widgets.TbGridView', array(
'id'=>'customer-grid',
'type'=>'striped bordered condensed',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'surname',
'name',
'middlename',
'dateOfBirth',
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'template'=>'{add} {list} {update} {print_act}',
'buttons'=>array
(
'add' => array
(
'label'=>'Назначить прием',
'icon'=>'plus',
'url'=>'Yii::app()->createUrl("reception/create", array("id"=>$data->id))',
'options'=>array(
'class'=>'btn btn-small',
),
),
'list' => array
(
'label'=>'Список предоставленных услуг',
'icon'=>'list white',
'url'=>'Yii::app()->createUrl("patient/update", array("id"=>$data->id))',
'options'=>array(
'class'=>'btn btn-small btn-info',
),
),
'update' => array
(
'label'=>'Изменить данные Пациента',
'icon'=>'pencil white',
'url'=>'Yii::app()->createUrl("customer/update", array("id"=>$data->id))',
'options'=>array(
'class'=>'btn btn-small btn-success',
),
),
'print_act' => array
(
'label'=>'Печать акта выполненных работ',
'icon'=>'print',
'url'=>'Yii::app()->createUrl("customer/printAct", array("id"=>$data->id))',
'options'=>array(
'class'=>'btn btn-small',
),
),
),
'htmlOptions'=>array(
'style'=>'width: 220px',
),
)
),
));
2 ответов
Я всегда находил, что когда мне нужно отобразить сложный элемент в gridview (особенно виджет), проще вызвать функцию из контроллера. Например, ваш gridview будет иметь столбцы, которые определены следующим образом:
'columns'=>array(
'surname',
'name',
'middlename',
'dateOfBirth'
...
array(
'name'=>'fieldName',
//call the function 'renderButtons' from the current controller
'value'=>array($this,'renderButtons'),
),
)
и тогда в вашем действии будет выглядеть что-то вроде этого. Это просто отображает пример виджета из Yii-booster пример страницы http://yii-booster.clevertech.biz/components.html#buttonDropdowns:
Edit: Это также полезно из-за функции обратного вызова renderButtons() принимает 2 параметра: $data и $row. Вы можете использовать $data для доступа к данным из поставщика данных gridview для динамического отображения виджета.
public function renderButtons($data, $row) {
$this->widget('bootstrap.widgets.TbButtonGroup', array(
'size'=>'large',
'type'=>'inverse', // '', 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
'buttons'=>array(
array('label'=>'Inverse', 'items'=>array(
array('label'=>'Action', 'url'=>'#'),
array('label'=>'Another action', 'url'=>'#'),
array('label'=>'Something else', 'url'=>'#'),
'---',
array('label'=>'Separate link', 'url'=>'#'),
)),
),
));
}
Я бы сделал это, добавив другой столбец. Оба TbColumnButton abd TbButtonGroup являются виджетами. Вы можете добавить группу кнопок по
...
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
),
array(
'class'=>'bootstrap.widgets.TbButtonGroup',
...
),