2012-03-31 28 views
8

Tôi có một bảng có nhiều hơn 5 cột, tôi muốn ẩn một số cột để các cột đó được hiển thị chỉ khi một số hàng được chọn hoặc được mở rộng.Ẩn cột trong YII CGridView

Đang sử dụng CGridView của yiiframework, vậy làm cách nào tôi có thể thực hiện việc này?

Bất kỳ sự giúp đỡ là đáng ..

Tôi muốn có một tính năng như thế này, để mở rộng một kỷ lục đặc biệt tôi có thể nhìn thấy các cột ẩn giá trị

enter image description here

Trả lời

19

Một cách là:

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

Vì vậy, bạn cần phải điều chỉnh các thuộc tính hiển thị động:

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

sth như thế này tùy thuộc vào yêu cầu của bạn

Sửa (sử dụng ajax + jquery)

dụ: views/người dùng/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', 
     ), 
    ), 
)); ?> 

tài điều khiển

public function actionGetExtra($id){ 
     $model=User::model()->findByPk($id); 
     echo json_encode(array('row'=> '<tr class="toggle"><td colspan="6">'. $model->username.'</td></tr>')); 

    } 

Enable quyền truy cập:

array('allow', // allow authenticated user to perform 'create' and 'update' actions 
       'actions'=>array('create','update','getExtra'), 
       'users'=>array('@'), 
      ), 

rằng có rất nhiều tôi có thể làm bạn. Hãy nhớ để thay đổi chức năng Java script để chuyển sang biểu tượng hình ảnh tôi đã không làm điều đó

+0

Nhưng tôi muốn thể hiện nó khi nào, tôi chọn hoặc chuyển đổi một số nút trong mỗi hàng .. –

+0

không đòi hỏi yêu cầu ajax để máy chủ hoặc bạn muốn làm ở phía khách hàng? Trong hàm checkVisbile(), bạn đặt logic khi làm cho trường hiển thị. Khi bạn nói "chọn hoặc chuyển đổi" tôi giả định rằng nó liên quan đến yêu cầu ajax – sakhunzai

+0

Không, tôi muốn ẩn nó trong tài liệu .. (no ajax) –

1
'columns'=>array(
     array(
      'name'=>'columnName', 
      'htmlOptions' => array('style' => 'display:none;'), 
      'headerHtmlOptions'=>array('style' => 'display:none;'), 
      'filterHtmlOptions'=>array('style' => 'display:none;'), 
    ), 
... 
+0

Bạn có thể thêm giải thích cho mã của bạn không, nó thực sự làm gì? – jmattheis

Các vấn đề liên quan