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.

 

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information