1

私のコントローラーでは:

$model = new Sheets();
            $criteria = new CDbCriteria;
            $criteria->compare('id', $model->id);
            $criteria->compare('track_name', $model->track_name, true);
            $criteria->addCondition('user_id = '.Yii::app()->user->getId().' and '.$listSetups[$i]['condition']);

$setups = new CActiveDataProvider($model, array('criteria' => $criteria));

私からしてみれば:

<?php $this->widget('zii.widgets.grid.CGridView', array(
            'id' => 'sheets-grid',
            'dataProvider' => $model,
        //'filter' => $model,
        'template'=>'{items}<div class="nav-controller">{pager}</div>',
            'enableSorting' => false,
            'columns' => array(

            array(
                  'header' => 'Track',
                  'name' => 'track_name',
                  'value' => $model->track_name,
                  'htmlOptions' => array(
                  'width' => '135px',
                 ),
            ),

しかし、私はこのエラーを受け取ります:

エラー:プロパティ"CActiveDataProvider.track_name"が定義されていません。

誰でも私にこれがなぜなのか見せてくれますか?そして、どうすれば修正できますか?$data->track_nameこのコードで$ model-> track_nameを使用してボタン'追加'をカスタマイズしたいので、使用したくありません:

array(
        'header' => '',
        'class' => 'CButtonColumn',
        'template' => '<div class="wrapper-tools">{share}{facebook}{twitter}{download}{add}{update}{delete2}</div>',
        'buttons'=>array (                                
                            'add' => array
                             (
                                 'label'=>'Add favorite',
                                 'imageUrl'=> (Users::model()->checkFavorite(Yii::app()->user->getId(), $model->track_name)) ? Yii::app()->themeManager->baseUrl."/default/images/favorite.png" : Yii::app()->themeManager->baseUrl."/default/images/favorite-disabled.png",
                                    'url'=>'Yii::app()->createUrl("/sheets/", array("id"=>$data->id))',
                                    'options' => array('id' => 'add-favorite', 'class' => 'admin-tools' ),
                                    //'visible' => 'Users::model()->checkFavorite(Yii::app()->user->getId(), $data->id) == false',
                                ),

                        ),
                        'htmlOptions' => array(
                            'class' => 'admin-tools-2',
                        ),
)

ありがとう

4

1 に答える 1

3

CGridViewで使用する必要がありますが$data->track_name、次の行が間違っています。

'value' => $model->track_name,

次のように値を設定する必要があります。

'value' => '$data->track_name',

アップデート

各行のボタンでデータを使用する場合は、データパラメータを使用する必要があります。CGridViewウィジェットは、指定された行のデータを$dataパラメータで一度に1行ずつレンダリングするため、$model->attributeここではコンテキストがありません。 CGridViewの行ごとに異なります。

paramは評価されないため、デフォルトでimageUrlはparamを使用できませんが$data、カスタムクラスを作成してCButtonColumnを拡張し、この動作をオーバーライドする場合は使用できます。

たとえば、クラスを作成し、フォルダ内のという名前のファイルにMyCButtonColumn保存できます(このようにして、必要に応じて自動ロードされます)。componentsMyCButtonColumn.php

renderButton次に、この新しいクラス内にメソッドを作成して、評価が必要かどうかを評価し、次のように新しく評価された標準メソッドimageUrlの結果を返す必要があります。CButtonColumn::renderButton()imageUrl

class MyCButtonColumn extends CButtonColumn
{
    protected function renderButton($id,$button,$row,$data)
    {
        if(isset($button['imageUrl']) && is_string($button['imageUrl']) && strpos($button['imageUrl'],'$data')!==false)
            $button['imageUrl'] = $this->evaluateExpression($button['imageUrl'],array('row'=>$row,'data'=>$data));

        return parent::renderButton($id,$button,$row,$data);
    }
}

最後に、ボタン列のクラスをからに変更する必要がありCButtonColumnますMyCButtonColumn。これを実行すると、次のように$data変数を介してimageUrl変数を解析できるようになります。

array(
    ...
    'class' => 'MyCButtonColumn',
    ...
    'buttons'=>array (
        'add' => array(
            ...
            'imageUrl'=> '(Users::model()->checkFavorite(Yii::app()->user->getId(),$data->track_name)) ? Yii::app()->themeManager->baseUrl."/default/images/favorite.png" : Yii::app()->themeManager->baseUrl."/default/images/favorite-disabled.png"',
            ...
        ),
        ...
    ),
    ...
),
于 2013-01-07T09:40:17.083 に答える