2012-03-31 21 views
8

Ho una tabella con più di 5 colonne, voglio nascondere alcune colonne in modo che quelle colonne siano mostrate solo se è selezionata una riga o espansa.Nascondere la colonna in YII CGridView

Sto usando CGridView di yiiframework, quindi come posso farlo in questo?

Ogni aiuto è apprezzabile ..

voglio una caratteristica di questo tipo, in modo che sull'espansione un record particolare posso vedere la colonna nascosta valori

enter image description here

risposta

19

Un modo è:

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

Quindi è necessario modificare dinamicamente gli attributi di visibilità:

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

sth come questo a seconda del vostro requisito

Modifica (usando Ajax + jquery)

esempio: views/utente 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', 
     ), 
    ), 
)); ?> 

utente

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

    } 

Abilita diritti di accesso:

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

che molto che posso fare per voi. Ricordatevi di cambiare la funzione Java script per alternare l'icona dell'immagine non ho fatto che

+0

Ma io voglio mostrare quando, seleziono o alternare qualche tasto in ogni riga .. –

+0

fa che richiede richiesta Ajax per server o vuoi fare dal lato client? Nella funzione checkVisbile() inserisci la logica quando rendere visibile il campo. Quando si dice "seleziona o commuta" presumo che si tratti di una richiesta Ajax – sakhunzai

+0

No voglio nasconderlo all'interno del documento .. (no ajax) –

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

Potresti aggiungere una spiegazione al tuo codice, cosa fa effettivamente? – jmattheis

Problemi correlati