2012-02-27 3 views
0

CActiveDataProvider와 함께 CGridView를 사용하고 있습니다. 모든 것이 잘 작동하지만 행의 ID에 따라 사용자 정의 버튼을 표시해야합니다.Yii CGrid 각 열의 ID에 액세스하는 방법보기

단추를 추가하고 작동 시키지만 행 ID에 따라 이미지를 사용자 지정할 수는 없습니다. 예제에서 볼 때 URL을 만들 때 $ data-> id를 호출하여 row의 id에 액세스 할 수 있지만 imageURL에 대해서는 id가 작동하지 않는다는 것을 알 수 있습니다. 내 코드는 다음과 같습니다.

$this->widget('zii.widgets.grid.CGridView', array(
      'dataProvider'=>$model->search(), 
      'filter'=>$model, 
      'columns'=>array(
        'id', 
        'name', 
        'desc', 
        'created', 
        array(
          'class'=>'CButtonColumn', 
          'header'=>'Active State', 
          'template'=>'{rank}', 
          'buttons'=>array(
            'rank'=>array(
              'label'=>'Rank',             
              'imageUrl'=>$this->getRank($data->id), 
              'url'=>'Yii::app()->createUrl("users/updateRank", array("id"=>$data->id))', 
              'options'=>array(
                'ajax'=>array(
                  'type'=>'POST', 
                  'url'=>"js:$(this).attr('href')",                
                ), 
              ), 
            ), 
          ),      
        ),      
      ), 
    )); 

이미지 URL은 이미지에 URL을 반환하는 컨트롤러에서 함수를 호출합니다. 그러나 현재 레코드 사용자의 ID를 전달할 수 없어 클릭 할 때마다 항상 기본 이미지를 다시 얻습니다. $ data-> id를 사용하면 데이터가 존재하지 않는다는 오류가 발생합니다. $ this-> id를 사용하면 컨트롤러를 참조하고 컨트롤러 ID를 얻습니다. 어쨌든 나는 행의 ID를 가져 와서 함수에 전달할 수 있습니다.

답변

2

그것은 당신이 따옴표 놓치고있는 것 같다

'imageUrl'=>'$this->getRank($data->id)', 

가 앞으로 단계는 CGridView에서

을 (아마 당신이 사용자 정의 함수 작업이 방법을 얻을 뭔가 더 할 필요)입니다, 어떤 PHP 각 행에 대해 독립적으로 실행하려는 코드는 따옴표로 묶어야합니다. '펼쳐진'PHP를 사용하면 한 번만 계산 된 후 값이 각 행에 대해 동일하게됩니다.

+0

는 이미지 URL은 간단하게 '$ this-> getRank ($ 데이터 -> ID)를'내가 그들을 떠날 경우에는 함수가 호출되는 않지만 내가 돈, t는 변수를 전달하는 방법을 알고 . 나는 따옴표에 관하여 당신의 점을 가지고 간다 그러나 작동하지 않는다. – Orlymee

+0

죄송합니다. 이제 '버튼'배열 안에 있습니다. 설명서에 따르면 이미지 URL이 있어야합니다 (PHP 표현식이 아님). 그래서 CButtonColumn을이 방법으로 사용할 수없는 것처럼 보입니다. 예를 들어, 동일한 버튼에 다른 이미지가있을 수 없습니다 (예 : '수정'하는 확장명을 쓰지 않는 한).). http://www.yiiframework.com/doc/api/1.1/CButtonColumn#buttons-detail – zuups

+0

kraabus에게 감사드립니다. 설명서를 다시 읽었을 때 PHP가 아닌 문자열로 설정되었습니다. 그래서 대신 가치있는 속성을 가진 함수를 호출하여 완전한 내용을 정확한 링크로 반환하는 CDataColumn을 사용했습니다. 감사. 내일 완벽한 솔루션을 게시 할 예정입니다. – Orlymee

2

위의 의견을 참조하십시오. 내가하려고했던 것은 CButtonColumn을 통해 가능하지 않았습니다. 대신 현재 CDataColumn을 사용 중입니다.

$this->widget('zii.widgets.grid.CGridView', array(
     'dataProvider'=>$model->search(), 
     'filter'=>$model, 
     'columns'=>array(
       'id', 
       'name', 
       'desc', 
       'created', 
       array(
       'class'=>'CDataColumn', 
       'header'=>'Active State',           
       'type'=>'raw', 
       'value'=>'getStatus("$data->id")', 
      ),      
     ), 
)); 

의 getStatus는 화상으로서 최초의 파라미터와 링크 (ajaxLink)가 포함이 열의 내용을 반환한다. 내가 따옴표를 추가하는 경우

function getStatus($id) 
{ 
    $imagePath=""; 
    ......... do your check and figure out the image you want to use 

    $content ="<div align='middle'>".CHtml::ajaxLink(CHtml::image($imagePath,'Rank', array('title'=>'Rank')),CHtml::normalizeUrl(array('user/rank', 'id'=>$id)), array('type'=>'POST'))."</div>"; 


    return $content; 
} 
관련 문제