Как сделать пользовательскую кнопку Yii CButtonColumn глобальной?

Я использовал CGridView от Yii (на самом деле это TbGridView от yiistrap), я создал собственный шаблон CButtonColumn с кнопкой прослушивания, все работает нормально, пока я не обнаружил, что копирую этот код каждый раз, когда мне нужна кнопка прослушивания для списка таблиц.

array(
'class'=>'bootstrap.widgets.TbButtonColumn',
'template'=>'{listen}{delete}',
'buttons'=>array(
'listen'=>array(
'label'=>'listen',
'options' => array('class'=>'view headphones'),
'icon' => 'icon-headphones',
'url' => '#',
'visible' => '$data->filename_32',
),
),
),

Что я могу сделать, чтобы сделать этот маленький кусочек кода глобально настроенным? Такие как:

array(
'template'=>'{listen}{delete}',
'buttons'=>array(
'listen' => 'xxxx.widgets.buttons.Listen',
)
)

Что-то вроде этого.

0

Решение

Вы можете! В вашем config / main.php добавьте:

'components' => array(
'widgetFactory' => array(
'widgets' => array(
'bootstrap.widgets.TbButtonColumn' => array(
'template'  => '{listen}{delete}',
'buttons'   => array(
'listen' => 'xxxx.widgets.buttons.Listen',
)
),
)
)
),

Этот метод в основном используется для предварительной настройки внутренних виджетов, хотя в ситуациях, когда вы не можете контролировать точный класс загружаемого виджета. В вашем случае, похоже, вы указываете имя класса виджета вручную, поэтому простое переопределение виджета TbButtonColumn может быть более простым и понятным решением:

class MyTbButtonColumn extends TbButtonColumn {
public $template = '{listen}{delete}';

public $buttons = array(
'listen' => 'xxxx.widgets.buttons.Listen',
);
}

array(
'class' => 'MyTbButtonColumn',
),
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]