Yii Bootstrap: sostituire CJuiAutoComplete con TbTypeahead

da Ott 18, 2013Blog0 commenti

diff bootstrapAbbiamo di recente sostituito il template di un’applicazione da quello standard a quello fornito dall’estensione Yii Bootstrap, di migliore impatto e con funzionalità molto utili, oltre che accattivanti.

Tra i vari widget disponibili in Bootstrap c’è Typeahead, l’equivalente dell’autocompletamento in Yii. Nel caso l’elenco dei valori disponibili sia predeterminato e fisso la sostituzione è indolore, una leggera complessità si aggiunge nel caso i valori siano da reperire tramite un’azione esterna (ajax).

La sostituzione non è particolarmente difficile ma richiede alcune piccole modfiche al codice.

Partiamo dal widget esistente:

echo ‘<div class=”row”>’;
echo $form1->label($model,’codice_da’);
$this->widget(‘zii.widgets.jui.CJuiAutoComplete’,
  array(
    ‘model’=>$model,
    ‘attribute’=>’codice_da’,
    ‘source’=>$this->createUrl(‘card/autocompletaCard’),
    ‘options’=> array(
      ‘showAnim’=>’fold’,
    ),
    ‘htmlOptions’=>array (
      ‘style’=>’text-transform: uppercase’,
     ),
     ‘cssFile’=>false,
   )
);
echo $form1->error($model,’codice_da’);
echo “</div>”;

Come vediamo abbiamo un modello $model con attributo codice_da e l’autocompletamento viene fatto dall’azione autocompletaCard presente nel controller card. Questa funzione deve restituire i risultati in formato JSON.

 

Il nuovo widget sarà composto come segue:

echo $form1->label($model,’codice_da’);
$this->widget(‘bootstrap.widgets.TbTypeahead’,array(
  ‘model’=>$model,
  ‘attribute’=>’codice_da’,
  ‘options’=> array(
    ‘source’=>’js:function(query,process){
      $.ajax({
        url: “‘.$this->createUrl(‘card/autocompletaCard’).'”,
        type: “GET”,
        dataType:”json”,
        data: {term: query},
        success: process,
      });
    }’, 
  ),
  ‘htmlOptions’=>array (
    ‘style’=>’text-transform: uppercase’,
  ),
));
echo $form1->error($model,’codice_da’);

 

Come vediamo il widget è praticamente simile a quello dell’esempio fornito dalla documentazione dell’estensione, con la variante che il parametro source diventa una funzione anziché un semplice array. La chiave è la chiamata a process che passa il risultato della chiamata al widget per la creazione della tendina.

Per altre informazioni visitate la sezione del nostro blog.

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.