sebastienadam
(Sebastien Adam Webdev)
September 12, 2012, 2:20pm
1
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.
sebastienadam
(Sebastien Adam Webdev)
September 13, 2012, 3:31pm
2
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 :','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)',
),
),
)); ?>
abennouna
(Abennouna)
September 13, 2012, 4:01pm
3
Alors que donne la solution proposée ?
abennouna
(Abennouna)
September 14, 2012, 9:53am
5
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 !
sebastienadam
(Sebastien Adam Webdev)
September 14, 2012, 10:10am
6
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/ )