【问题标题】:Hiding column's in YII CGridView在 YII CGridView 中隐藏列
【发布时间】:2012-04-14 19:21:37
【问题描述】:

我有一个超过 5 列的表格,我想隐藏一些列,以便只有在选择了某行或其展开时才显示这些列。

我正在使用 yiiframework 的 CGridView ,那我该怎么做呢?

任何帮助都是可观的..

我想要一个这样的功能,以便在展开特定记录时我可以看到隐藏的列值

【问题讨论】:

    标签: php html yii


    【解决方案1】:

    一种方法是:

     'columns'=>array(
            array(
              'name'=>'columnName',
              'visible'=>false
                ),
             )
    

    所以你需要动态操作可见性属性:

     'visible'=>$this->checkVisible() //custom function 
    

    这取决于你的要求

    编辑(使用 ajax +jquery)

    示例: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 脚本函数以切换图像图标 我没有这样做

    【讨论】:

    • 这需要对服务器的 ajax 请求还是您想在客户端执行?在 checkVisbile() 函数中为您设置何时使该字段可见的逻辑。当您说“选择或切换”时,我认为它涉及 ajax 请求
    • 不,我想将它隐藏在文档中..(没有 ajax)
    • 通过 ajax 隐藏网格列是可能的,如果你发出 ajax 请求,它不会 STICK to-gather。例如,如果您通过 javascript 隐藏列,但是当您通过搜索/选择/页面导航刷新网格时,隐藏的列将再次可见。所以我的理解是您应该在服务器端处理网格列的可见性
    • 这里已经解决了确切的问题,请关注论坛主题:yiiframework.com/forum/index.php/topic/…
    • 这很好,但为此我需要将额外的列视为另一个元组,我该如何做到这一点,因为一行中的所有列都属于同一模型
    【解决方案2】:
    'columns'=>array(
          array(
                'name'=>'columnName',
                'htmlOptions' => array('style' => 'display:none;'),
                'headerHtmlOptions'=>array('style' => 'display:none;'),
                'filterHtmlOptions'=>array('style' => 'display:none;'),
          ),
    ...
    

    【讨论】:

    • 您能否为您的代码添加一个解释,它实际上是做什么的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多