c'e' solo un modo di fare le cose: farle bene
CakePHP è un framework web scritto in PHP, che segue i principi di Ruby on Rails e quindi permette un rapido sviluppo delle applicazioni.
La componente Ajax di CakePHP si basa su Prototype ma, l’estrema flessibilità del framework, ci permette di includere qualsiasi altra libreria Javascript.
Io utilizzo jQuery perché, con poche e comprensibili istruzioni, permette di fare cose davvero straordinarie e quindi ho pensato di scrivere un helper per CakePHP che implementasse l’autocomplete facendo delle richieste Ajax al server tramite l’ausilio di jQuery.
Il mio helper si chiama “jmycake” perché verrà ampliato ogni qualvolta avrò la necessità di jQuery all’interno delle mie applicazioni.
Ecco come ho è strutturato l’helper:
La funzione autocomplete aggiunge un blocco di codice JavaScript che si occuperà di:
Nel file app_controller.php sarà necessario inserire questa funzione:
Funzione da inserire in app_controller.php
Eh, come il buon pattern MVC vuole, creare la relativa vista:
La vista ha lo stesso nome della funzione (autocomplete), con estensione .ctp visto che utilizzo CakePHP 1.2 ed io l’ho posizionata nella directory “common” ma il file può essere salvato dove si vuole a patto di modificare questa riga nell’app_controller:
$this->render('autocomplete','ajax','/common/autocomplete');
C’è da ricordarsi inoltre di inserire ‘Jmycake‘ nell’array $helpers del vostro controller insieme a ‘Html‘, ‘Form‘ e ‘Javascript‘:
var $helpers = array('Html','Form','Javascript','Jmycake');
Io l’ho inserito direttamente in app_controller.php così è ereditario in tutti gli altri controller.
Adesso inseriamo in una vista di prova l’autocomplete.
Supponiamo che abbiamo questa vista:
Se desideriamo l’autocompletamento sul campo “nation“, sarà sufficiente aggiungere dentro ai tag del form:
<?php echo $jmycake->autocomplete('NationNation','Nation/nation',array('NationId'=>'id','NationIso'=>'iso')); ?>
Così facendo all’input con id “NationNation” verrà aggiunto l’autocompletamento che prenderà i dati dal modello “Nation”, cercando, le lettere inserite attreaverso l’input, nel campo “nation” (ecco perché il secondo parametro è Nation/nation”).
L’array passato come ultimo argomento contiene gli id dei campi di input da riempire ed il nome del campo da cui prendere i dati nel database.
La funzione autocomplete ha anche altri due parametri facoltativi che sono:
Per finire, vi mostro il mio CSS che renderizza i risultati:
Foglio di stile per l’autocomplete
Ovviamente va incluso sia il foglio di stile sopra mostrato che la libreria jQuery che si può scaricare liberamente dal sito.
Spero di essere stato utile a qualcuno e di ricevere qualche feedback positivo.
18 lune e tante stelle... La #Neve è tutto! http://t.co/Zwg5fhky [gianlucagentile]
@AngelikaCoco presto capirai anche tu perché ne vale sempre sempre sempre la pena! Snowboard4Me? It's my life... [gianlucagentile]
Eh poi capisci che cos'è la felicità. #Neve [gianlucagentile]
Powered by Lifestream.
| L | M | M | G | V | S | D |
|---|---|---|---|---|---|---|
| « nov | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||
4 Responses for "CakePHP JQuery autocomplete Helper"
[...] controllavo le visite con Google Analytics, ho visto che hanno raggiunto IdeaFactory, in cerca del jQuery Autocomplete Helper, da CakePHP.jp e spulciando il sito ho trovato [...]
bravo!
però Model/field è deprecated-
meglio Model.field
Ciao Gianluca!
E’ possibile avere il tuo esempio/helper scaricabile da qualche parte? I link che osno sul tuo sito non funzionano più :S
Cheers
Franco
Lo trovi sul bakery di Cake ma ti consiglio di non usarlo, non funziona bene con Internet Explorer. Usa il plugin Autocomplete di jQuery, è molto meglio!
Leave a reply