Я использовал 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',
)
)
Что-то вроде этого.
Вы можете! В вашем 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',
),
Других решений пока нет …