Uso di un widget TbSelect2 come dropdown per filtrare una TbGridView

da Mag 15, 2014Blog0 commenti

I widget di YiiBooster sono molto utili, ma a volte un po’ complicati da usare. Spesso e volentieri basta sbagliare un parametro per non avere l’effetto desiderato, senza però alcuna avvisaglia di errore. In questo caso vediamo come usare una Select2 (widget.TbSelect2) per filtrare una TbGridView (o CGridView).

Il codice completo è molto semplice:

$this->widget(‘bootstrap.widgets.TbGridView’, array(
    ‘id’ => ‘my-grid’,
    ‘dataProvider’ => $model->search(),
    ‘afterAjaxUpdate’=>”function(id,data){ jQuery(‘#nome_campo_due‘).select2({‘placeholder’:’Selezionare per filtrare’,’width’:’resolve’});}”,
    ‘filter’ => $model,
    ‘columns’ => array(
        […]
        array(
            ‘name’ => ‘nome_campo’,
            ‘type’ => ‘raw’,
            ‘filter’ => $this->widget(‘bootstrap.widgets.TbSelect2’,array(
                ‘model’=>$model,
                ‘attribute’=>’nome_campo’,
                ‘data’=> CHtml::listData(NomeModello::model()->findAll(array(‘order’ => ‘codice’)), ‘id’, ‘codiceDescrizione’),
                ‘options’=>array(‘placeholder’=>’Selezionare per filtrare’),
                ‘htmlOptions’=>array(‘id’=>’nome_campo_due‘,),
            ),true),
        ),
        […]

Due note (che ci sono costate un po’ di tempo!):

  1. abbiamo usato un id personalizzato in quanto lo stesso nome campo è normalmente presente nella stessa pagina nella vista _search. Lasciando lo stesso id la select2 sarebbe stata applicata due volte allo stesso campo, invece che una volta al primo e una al secondo;
  2. afterAjaxUpdate: questa opzione è necessaria altrimenti ad un refresh della griglia (cambio pagina, aggiornamento ricerca) la dropdown non sarebbe più di tipo select2, essendo che il codice Javascritpt non viene passato dall’aggiornamento ajax.

 

CREATE YOUR PROJECT

Book a free consultation

Your business is constantly evolving. Tell us about the project you have in mind, whether it's an e-commerce website or a strategic business solution.