2013-01-07 3 views
1

을 정의되지 않은YII cgridview 재산권 "CActiveDataProvider.abc은"내 컨트롤러에서

<?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.

누구를 왜 이걸 보여줄 수 있니? 그리고 내가 하시던를 해결할 수있는 방법을 내가 버튼을 사용자 지정이 코드에서 $ 모델 -> TRACK_NAME를 사용하고자하기 때문에 '추가'$data->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' => '$data->track_name', 
:

'value' => $model->track_name, 

당신은 그래서 같은 값을 설정해야 0

UPDATE

당신이 CGridView 위젯이 주어진 라인의 데이터와 한 번에 하나 개의 라인을 렌더링하는 당신이, 당신은 여전히 ​​데이터 PARAM을 사용할 필요가 각 라인을위한 버튼의 데이터를 사용하려는 언급으로 $data param, $model->attribute에는 CGridView의 모든 라인마다 다르기 때문에 여기에 컨텍스트가 없습니다.

imageUrl param이 평가되지 않기 때문에 기본적으로 $data 매개 변수를 사용할 수 없지만 사용자 지정 클래스를 만들어 CButtonColumn을 확장하고이 동작을 재정의 할 수 있습니다.

MyCButtonColumn 등의 클래스를 만들고 components 폴더에 파일을 MyCButtonColumn.php (이 방법은 필요할 때 자동로드 됨)으로 저장할 수 있습니다.

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); 
    } 
} 

:

이제 당신은 평가해야하는 경우 imageUrl을 평가하는 새로운 클래스 내에서 renderButton 방법을 만든 다음 새로 평가 imageUrl 그래서 등으로 표준 CButtonColumn::renderButton() 방법의 결과를 반환해야합니다 마지막으로 버튼 열 클래스를 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

난에 대한 ... 어떤 이유로 –

+0

을 '$ 데이터 -> TRACK_NAME'을 사용하지 않으 어떤 이유? CGridView 열의 값 필드에 $ data가 있어야합니다. $ model-> track_name에 값이 없습니다. – Stu

+0

이유를 추가하기 위해 질문을 업데이트했습니다 ... '$ data-> track_name'을 사용할 수 없습니다. 상태. –