Mise À Jour D'un Cgridview Avec Une Liste Déroulante

Bonjour à tous,

J’utilise un CGridView pour afficher une liste de notes. Ces notes appartiennent à des catégories qui sont filtrées au moyen d’une liste déroulante. La première image attachée (before.png) donne un aperçu du résultat.

Comme l’affichage de la catégorie n’est pas pertinente, je désire obtenir un résultat comme illustré par la deuxième image (after.png).

Pour cela, voici le code de ma vue:




<h1><?php echo CHtml::encode(Yii::t('app','Notes')); ?></h1>


<div>

  <?php echo CHtml::label(CHtml::encode(Yii::t('app','Category:')),'Note_id_category'); ?>

  <?php echo CHtml::dropDownList('Note_id_category',Helper::lastCategory(),Category::byUser()); ?>

</div>


<?php $this->widget('zii.widgets.grid.CGridView', array(

  'id'=>'note-grid',

  'dataProvider'=>$model->search(),

  'updateSelector' => '{page}, {sort}, #Note_id_category',

  'columns'=>array(

    array(

      'name'=>'title',

      'type'=>'raw',

      'value'=>'CHtml::link(CHtml::encode($data->title), Yii::app()->urlManager->createUrl("/note")."/".$data->id)',

    ),

    array(

      'name'=>'date_creation',

      'value'=>'Helper::formatDate($data->date_creation)',

    ),

    array(

      'name'=>'date_modification',

      'value'=>'Helper::formatDate($data->date_modification)',

    ),

  ),

)); ?>



Je voudrais savoir comment faire pour que ma CGridView soit mise à jour sur base de la valeur de la liste déroulante.

Merci d’avance et à bientôt.

Voici la solution proposée sur le forum en anglais.




<?php

Yii::app()->clientScript->registerScript('search', "

  $(document).on('change', '#Note_id_category', function() {

    $.fn.yiiGridView.update('note-grid', {

      data: $('#Note_id_category').serialize()

    });

    return false;

  });

",CClientScript::POS_HEAD);

?>


<div>

  <?php echo CHtml::label('Catégorie&nbsp;:','Note_id_category'); ?>

  <?php echo CHtml::dropDownList('Note[id_category]',Helper::lastCategory(),Category::byUser(),array('id'=>'Note_id_category')); ?>

</div>


<?php $this->widget('zii.widgets.grid.CGridView', array(

  'id'=>'note-grid',

  'dataProvider'=>$model->search(),

  'columns'=>array(

    array(

      'name'=>'title',

      'type'=>'raw',

      'value'=>'CHtml::link(CHtml::encode($data->title), Yii::app()->urlManager->createUrl("/note")."/".$data->id)',

    ),

    array(

      'name'=>'date_creation',

      'value'=>'Helper::formatDate($data->date_creation)',

    ),

    array(

      'name'=>'date_modification',

      'value'=>'Helper::formatDate($data->date_modification)',

    ),

  ),

)); ?>



Alors que donne la solution proposée ?

Ca marche au poil, merci :slight_smile:

Ah ok je pensais que ça ne donnait rien.

En tout cas je note l’utilisation de serialize() sur un input, je pensais que c’était réservé aux form !

Normalement, oui, serialize() s’utilise pour les form. Mais il est également possible de l’utiliser sur des input, textarea et select (cfr la doc: http://api.jquery.com/serialize/)