2013-05-03 10 views
6

yii Bootstrap + Widget TbButtonColumn + Widget TbButtonGroup

mit einem derartigen Problem konfrontiert:yii Bootstrap + Widget TbButtonColumn + Widget TbButtonGroup

Tabelle wird durch die Widget TbGridView aus Bootstrap gebildet (von yii-booster). In der Spalte TbButtonColumn formiere ich das "Bearbeiten/Löschen, etc."

Aber eine Schaltfläche ich mit der Wirkung von Split tun will Aufklappmenü 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', 
      ), 
     ) 
    ), 
)); 
+0

hinzufügen Ich habe nicht mit TbGridView gearbeitet, aber ich denke, dass Sie das Widget TbGridView erweitern können. Suchen Sie nach dem Ort, an dem der ursprüngliche Autor die Schaltflächen zeichnet, und Sie können diese Funktion überschreiben, um das benutzerdefinierte Schaltflächenwidget zu starten. Die Eingabe für dieses Widget sollte aus den TbGridView-Optionen erfolgen. –

Antwort

5

Ich habe immer gefunden, dass, wenn ich brauche ein komplexes Element in einer Gridview zu machen (vor allem eines Widget) ist es einfacher, wenn Sie eine Funktion vom Controller aufrufen. Zum Beispiel würden Ihre Gridview Spalten haben, die wie folgt definiert sind:

'columns'=>array(
    'surname', 
    'name', 
    'middlename', 
    'dateOfBirth' 
    ... 
    array(
     'name'=>'fieldName', 
     //call the function 'renderButtons' from the current controller 
     'value'=>array($this,'renderButtons'), 
    ), 
) 

Und dann in der Aktion würde wie folgt aussehen. Dies rendert nur das Beispiel Widget von Yii-Booster Beispiel Seite http://yii-booster.clevertech.biz/components.html#buttonDropdowns:

Bearbeiten: Dies ist auch hilfreich, weil die Callback-Funktion renderButtons() akzeptiert 2 Parameter: $ Daten und $ Zeile. Sie können mit $ data auf Daten vom Datenprovider der Gridview zugreifen, um ein Widget dynamisch zu rendern.

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'=>'#'), 
     )), 
    ), 
    )); 
} 
+1

Ich habe es versucht und es hat funktioniert. Vielen Dank. –

0

Ich würde dies tun, indem Sie eine weitere Spalte hinzufügen. Beide TbColumnButton abd TbButtonGroup sind beide Widgets. Sie können eine Schaltflächengruppe von

... 
array(
    'class'=>'bootstrap.widgets.TbButtonColumn', 
), 
array(
    'class'=>'bootstrap.widgets.TbButtonGroup', 
    ... 
), 
Verwandte Themen