Backoffice Grid Views often list information like Posts for a blog while showing at the same time linked information like the User who wrote that post. For more efficiency, it is appropriate that the User is displayed as a link to the User detail page.
CDataColumns allow adding a link by modifying the 'value' property for the column, whicle CLinkColumns are built to create columns with links, but not really associated to data.
In order to make the addition of links as easy as this:
$this->widget('zii.widgets.grid.CGridView', array( [...other gridview options...], 'columns'=>array( array( 'name'=>'username', 'urlExpression'=>'array("admin/devices/view","id"=>$data->user_id)', 'class'=>'YDataLinkColumn', ), ) ));
, I created the following class (already referenced in the example above):
/** * YDataLinkColumn extends {@link CDataColumn} to facilitate adding * links to data values. * * This is particularly usefull in the backend to go from one entity * to the other. * * YDataLinkColumn 'joins' the {@link CLinkColumn} and {@link CDataColumn} * interfaces. */ class YDataLinkColumn extends CDataColumn { public $urlExpression; public $url="javascript:void(0)"; public $linkHtmlOptions=array(); public $imageUrl; protected function renderDataCellContent($row, $data) { ob_start(); parent::renderDataCellContent($row, $data); $label = ob_get_clean(); if($this->urlExpression!==null) $url=$this->evaluateExpression($this->urlExpression,array('data'=>$data,'row'=>$row)); else $url=$this->url; $options=$this->linkHtmlOptions; if(is_string($this->imageUrl)) echo CHtml::link(CHtml::image($this->imageUrl,$label),$url,$options); else echo CHtml::link($label,$url,$options); } }
Total 4 comments
thanks for code share :)
very useful
I didn't see pclinkbutton before - it adds the imageUrlExpression function. You are the author so you noticed the ressemblance.
What I prefer in my proposal is that it is easy to move from a CDataColumn (which is the default class) to YDataLinkColumn (without the need to change to labelExpression) and that CDataColumn is overloaded rather than copied.
Anyway, the idea is to share thoughts ;-).
http://www.yiiframework.com/extension/pclinkbutton/
Leave a comment
Please login to leave your comment.