2012-03-31 15 views
8

Mam tabelę z więcej niż 5 kolumnami, chcę ukryć niektóre kolumny, tak aby te kolumny były wyświetlane tylko wtedy, gdy wybrany jest jakiś wiersz lub jego rozszerzony.Ukrywanie kolumn w YII CGridView

Korzystam z CGridView yiiframework, więc jak mogę to zrobić?

Każda pomoc jest odczuwalny ..

chcę funkcję tak, tak, że na rozszerzeniu konkretny rekord mogę zobaczyć ukrytą kolumnę wartości

enter image description here

Odpowiedz

19

Jednym ze sposobów jest:

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

Musisz więc dynamicznie manipulować atrybutami widoczności:

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

czegoś takiego w zależności od zapotrzebowania

Edycja (za pomocą ajax + jQuery)

przykład: ciami/user Controller/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', 
     ), 
    ), 
)); ?> 

użytkownika

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

    } 

Włącz prawa dostępu:

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

tyle mogę dla ciebie zrobić. Pamiętaj, aby zmienić funkcję skryptu Java, aby włączyć ikonę obrazu nie robiłem że

+0

ale chcę pokazać, kiedy i wybrać lub włączyć jakiś przycisk w każdym rzędzie .. –

+0

robi wymaga ajax wniosek do serwer lub chcesz zrobić po stronie klienta? W funkcji checkVisbile() logiczne jest, kiedy pole będzie widoczne. Kiedy mówisz "wybierz lub przełącz" zakładam, że wymaga to żądania ajax – sakhunzai

+0

Nie chcę ukryć go w dokumencie .. (brak ajax) –

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

Czy możesz dodać objaśnienie kodu, co on faktycznie robi? – jmattheis

Powiązane problemy