Yii: 如何在CGridView组件中根据不同的记录行数据显示不同的操作
来源:互联网 发布:连云港网络推广 编辑:程序博客网 时间:2024/04/30 22:48
使用CGridView来显示表格数据,一个简单的需求如下:
表格中显示文章,每行的操作列需要根据文章的状态而变化,
比如已审核的文章不需要出现审核的操作,而处于新建状态的文章可以有批准和拒绝的动作。
缺省情况下CGridView是无法实现以上需求的,其CButtonColumn中的template虽然可以定制,但对每一行数据都一样。
'columns'=>array(...array( 'class'=>'FButtonColumn', 'header'=>'Actions', 'template'=>'{view} {approve} {reject}', 'buttons'=>array( 'view'=>array( 'label'=>'View', 'url'=>'Yii::app()->controller->createUrl("view", array("Id"=>$data->primaryKey))', ), 'approve'=>array( 'label'=>'Approve', 'url'=>'Yii::app()->controller->createUrl("approve", array("Id"=>$data->primaryKey))', ), 'reject'=>array( 'label'=>'Reject', 'url'=>'Yii::app()->controller->createUrl("reject", array("Id"=>$data->primaryKey))', ), ), 'htmlOptions'=>array('class'=>'alignLeft'),)...)
解决方法:
从CButtonColumn派生一个类FButtonColumn,override其init和renderDataCellContent方法:
public function init() {$this->initDefaultButtons();foreach($this->buttons as $id=>$button) {if(strpos($this->template,'{'.$id.'}')===false &&$this->template != '$data->getTemplate()')unset($this->buttons[$id]);...} ... } protected function renderDataCellContent($row,$data) { $tr=array(); ob_start(); foreach($this->buttons as $id=>$button) { $this->renderButton($id,$button,$row,$data); $tr['{'.$id.'}']=ob_get_contents(); ob_clean(); } ob_end_clean(); if($this->template === '$data->getTemplate()') { $template = $this->evaluateExpression($this->template,array('row'=>$row,'data'=>$data)); } echo strtr($template,$tr); }
然后更改视图中的template参数如下:
'template'=>'$data->getTemplate()',
iefreer
- Yii: 如何在CGridView组件中根据不同的记录行数据显示不同的操作
- 在gridview根据不同的状态显示不同的颜色
- Yii中CGridView单元格组件和数据提供者的使用
- Yii: 如何把JS脚本添加到CGridView数据行的操作按钮中
- 如何进行定义特性(Attribute),并且在程序中如何检索定义的特性,可以根据用户定义的不同特性进行不同的操作。
- 自定义 Yii CGridView Column 的显示
- 如何在DataGrid中显示来自不同DataTable的数据
- 如何在ListCtrl中显示不同的图片
- PHP YII框架学习 按条件查询显示在YII自带的CGridView上
- PHP YII框架学习 按条件查询显示在YII自带的CGridView上
- OA权限模块根据用户权限显示不同的操作按钮
- OA权限模块根据用户权限显示不同的操作按钮
- iOS 在一个屏幕中根据不同的按钮创建不同的 view 默认显示第一个
- 如何解决css样式表在不同浏览器中显示效果不同的问题
- 如何完成在一个图片中,点击不同区域显示不同的结果
- 如何解决css样式表在不同浏览器中显示效果不同的问题
- 如何解决css样式表在不同浏览器中显示效果不同的问题
- Yii框架中CGridView的使用方法
- 了解SVG
- 利用hash表思想,实现查找到第一个在字符串中出现的字符
- 操作系统--1写这一系列的目的
- 菜鸟逆袭 Crackme第二弹 附带注册机
- Squid的main函数源码分析
- Yii: 如何在CGridView组件中根据不同的记录行数据显示不同的操作
- objc 的新特性
- iPhone、iPhone4、iPad 程序启动画面的总结
- informatica客户端连接报错pcsf_46008
- 为Android加入busybox工具
- Shell十三问之一:什么是shell?
- 在weblogic下部署找不到授权文件的解决方法
- 任正非:一江春水向东流
- android多媒体本地播放流程video playback--base on jellybean (三)