2013-01-07 52 views
1

在我的控制器:警予cgridview屬性 「CActiveDataProvider.abc」 沒有定義

$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', 
       ), 
      ), 

但我得到這個錯誤:

Error:Property "CActiveDataProvider.track_name" is not defined.

任何人可以告訴我這是爲什麼?而如何解決it.And我不想使用$data->track_name,因爲我想用模型 - $> 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', 
         ), 
) 

感謝

回答

3

在你CGridView你必須使用$data->track_name,下面一行是錯誤的:

'value' => $model->track_name, 

您需要設置像這樣的值:

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

UPDATE

至於你提到要在每個你仍然需要使用數據PARAM線按鈕來使用數據,作爲CGridView控件呈現一條線,在與給定行的數據的時間$data param,$model->attribute仍然沒有上下文,因爲它對於CGridView中的每一行都是不同的。

因爲imageUrl參數是不評估,就無法使用默認的$data PARAM在那裏,但你可以,如果你創建一個自定義的類來擴展CButtonColumn和覆蓋此行爲。

你可以創建一個類,說MyCButtonColumn,並在名爲MyCButtonColumn.php文件保存在您的components文件夾中(這樣它會自動在需要時加載)。

現在,你需要這個新類中創建一個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。一旦你做到了這一點,那麼你將能夠通過imageUrl變量解析$data變量,像這樣:

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"', 
      ... 
     ), 
     ... 
    ), 
    ... 
), 
+0

我不想用「$數據 - > TRACK_NAME。」出於某種原因... –

+0

爲什麼原因?您*有*在CGridView列的值字段中使用$ data,$ model-> track_name沒有值 – Stu

+0

我更新了我的問題以添加原因... 我無法在此中使用'$ data-> track_name'情況。 –