2014-11-03 5 views
0

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

Почему бы вам не использовать виджеты? поместите представление в папку компонентов, создайте соответствующий контроллер, а затем вызовите представление в одной строке кода :) –

ответ

1

Вы можете! В вашей конфигурации/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', 
), 
+0

Я вижу, однако, моя самая большая проблема заключается в том, как точно написать 'xxxx.widgets.buttons.Listen'? Я не могу найти «CButton», который я могу свободно расширить и создать свой собственный класс «ListenButton», это расстраивает, независимо от того, что я делаю, я просто продолжаю дублировать '' 'array ( 'label' => 'listen', 'options' => array ('class' => 'view headphones'), 'icon' => 'icon-headphones', 'url' => '#', 'visible' => '$ data -> filename_32 ', ), '' ' –

+0

@ChrisPeng Ах, правильно, похоже, что в Yii1 нет такой вещи, как класс« Button », свойство buttons - это простой массив. Но вы могли бы просто определить такой массив в MyTbButtonColumn, no? класс 'MyTbButtonColumn расширяет TbButtonColumn { $ кнопки общественные = массив ( \t 'слушать' => массив ( 'метка' => 'слушать', \t ... ' – david