【发布时间】:2012-04-14 19:21:37
【问题描述】:
我有一个超过 5 列的表格,我想隐藏一些列,以便只有在选择了某行或其展开时才显示这些列。
我正在使用 yiiframework 的 CGridView ,那我该怎么做呢?
任何帮助都是可观的..
我想要一个这样的功能,以便在展开特定记录时我可以看到隐藏的列值
【问题讨论】:
我有一个超过 5 列的表格,我想隐藏一些列,以便只有在选择了某行或其展开时才显示这些列。
我正在使用 yiiframework 的 CGridView ,那我该怎么做呢?
任何帮助都是可观的..
我想要一个这样的功能,以便在展开特定记录时我可以看到隐藏的列值
【问题讨论】:
一种方法是:
'columns'=>array(
array(
'name'=>'columnName',
'visible'=>false
),
)
所以你需要动态操作可见性属性:
'visible'=>$this->checkVisible() //custom function
这取决于你的要求
示例:views/user/admin.php
.....
.....
<?php
$toggleUDetails = <<<JS
$('a.toggle').live('click',function(e){
e.preventDefault();
if(this.href.split('#')[1]=='loaded') return $(this).closest("tr").next('tr.toggle').toggle();
trow=$(this).closest("tr");
var ajaxOpts={type:"POST", url:this.href ,dataType:'json',success:function(data){
$(trow).after(data.row);
}
};
this.href=this.href+'#loaded';
$.ajax(ajaxOpts);
});
JS;
Yii::app()->clientScript->registerScript('toggleUD', $toggleUDetails, CClientScript::POS_READY);
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CButtonColumn',
'header'=>'Toggle Details',
'template'=>'{toggle}',
'buttons'=>array(
'toggle'=>array(
'label'=>'Details',
'imageUrl'=>Yii::app()->request->baseUrl.'/images/expand.png',
'url'=>'Yii::app()->createUrl("user/getExtra", array("id"=>$data->id))',
'options'=>array('class'=>'toggle',
),
),
),
),
'id',
'username',
'password',
'email',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
public function actionGetExtra($id){
$model=User::model()->findByPk($id);
echo json_encode(array('row'=> '<tr class="toggle"><td colspan="6">'. $model->username.'</td></tr>'));
}
启用访问权限:
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update','getExtra'),
'users'=>array('@'),
),
我能为你做多少。记得更改 Java 脚本函数以切换图像图标 我没有这样做
【讨论】:
'columns'=>array(
array(
'name'=>'columnName',
'htmlOptions' => array('style' => 'display:none;'),
'headerHtmlOptions'=>array('style' => 'display:none;'),
'filterHtmlOptions'=>array('style' => 'display:none;'),
),
...
【讨论】: