0

カスタム ウィジェットがあります... Tbgridview でウィジェットを呼び出したいだけです...

ここにコードがあります..

$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'test1',
'type' => 'striped bordered condensed',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'name',
    'addr',
    'email',

     array(

                   'type'  => 'raw',
                    'value' => $this->widget('DropDownRedirect', array(
                                 'data' => array('1'=>'1','2'=>'2','3'=>'3'))),
                 ),
           )
     ));

うまくいかない..誰か助けてくれる?...

以下のクラス DropdownRedirect を参照してください。

class DropDownRedirect extends CWidget {
public $name; 

public $select; 

public $data; 

public $htmlOptions = array(); 

public $url;

public $replacement = '__value__';

protected function registerScript() {
    $script = '$("#'.$this->id.'").change(function(){'
    .'$(location).attr("href", "'.$this->url.'".replace("'.$this->replacement.'", $(this).val()));'
    .'});';
    Yii::app()->clientScript->registerScript(__CLASS__.$this->id, $script);
}

public function init() {
    if (! isset($this->name))
        $this->name= $this->id;
    $this->registerScript();
}

public function run() {
    if (!isset($this->htmlOptions['id'])) $this->htmlOptions['id'] = $this->id;
    echo CHtml::dropDownList($this->name, $this->select, $this->data, $this->htmlOptions);
}}

前もって感謝します

4

2 に答える 2

3

CGridView は、value評価されると文字列になるため、php 式を期待します。

  1. php 式は文字列として渡す必要があります
  2. $captureOutput(最後のパラメーター) はCController::widget()、ウィジェットをディスプレイに直接送信するのではなく、キャプチャするために true に設定する必要があります。
  3. php 式で$thisは、列オブジェクトを参照するため、コントローラーは次を使用して参照する必要があります。$this->grid->controller

したがって:

'value' => '$this->grid->controller->widget("DropDownRedirect",
            array("data" => array("1"=>"1","2"=>"2","3"=>"3")),
            true)'
于 2013-06-15T09:24:07.530 に答える
0
array(
               #'name' => 'name',
               'type'  => 'raw',
                'value' => $this->widget('DropDownRedirect', array(
                             'data' => array('1'=>'1','2'=>'2','3'=>'3'))),
             ),
       )
 ));

名前の列が必要だと思います。

于 2013-06-15T10:22:06.473 に答える