Jump to content



Photo

Yii Cgridview How To Access Id For Each Column

yii cgridview

  • Please log in to reply
1 reply to this topic

#1 orlymee

orlymee

    Newbie

  • Members
  • Pip
  • 1 posts

Posted 27 February 2012 - 6:21 PM

I am using a CGridView with CActiveDataProvider. Everything works fine however now I have a need to show a custom button depending upon the id of the row.
I can add the button and get it to work as well however I cannot customise the image according to the row id. I can see from examples that when creating url I can access the id of row by calling $data->id however when I try to do that for imageURL it does not work. My code is below:
$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')",															  
													),
											),
									),
							),					
					),					
			),
	));

Image URL calls a function in my controller which returns a url to the image. However I cannot pass the id of the current record user is clicking upon and I always get the default image back. If I use $data->id I get an error that data does not exist. If I use $this->id it is referring to the controller and I get the controller id. Anyway I can get the id of the row and pass it over to a function.
  • 0

#2 Larry

Larry

    Administrator/Writer

  • Administrators
  • 3,906 posts
  • LocationState College, PA (USA)

Posted 29 February 2012 - 9:57 AM

I don't know offhand if the value for imageUrl can be determined dynamically, but if you look at the following line, which assigns a value to url, that line quotes the code to be executed. You should try that.
  • 0