Pian pianino il nostro applicativo sta prendendo forma. Dalla bozza iniziale, funzionale, ma imperfetta, pezzo dopo pezzo stiamo raggiungendo ottimi risultati che, lo voglio sottolineare, non richiedono delle conoscenze pazzesche.
Oggi ci dedicheremo alle query di selezione dei dati dal DB. Se avete letto qualcosina su Symfony, saprete che la gestione del modello si appoggia sull’ORM Propel (nel nostro caso, c’è la possibilità di usare Doctrine) e sulla classe Criteria. Di default quando viene creato il modello, il framework genera automaticamento le query di base, ma come facciamo a modificarle per aggiungere ulteriori parametri? Dobbiamo aggiungere solo un po’ di codice alle classi esistenti, ma niente di sconvolgente.
Innanzitutto decidiamo cosa fare. Il mio intento è quello di ordinare alfabeticamente tutte le informazioni, per cui alle nostre query dovremmo aggiungere una condizione “Order By”.
Come nello scorso post, mostrerò come agire prendendo in esempio un solo file, ma bisogna lavorare su ogni modulo ed in particolare sui seguenti file:
lib/model/ArticoliPeer.php
lib/model/AutoriPeer.php
lib/model/CategoriePeer.php
lib/model/EditoriPeer.php
lib/model/LibriPeer.php
lib/model/RivistePeer.php
Apriamo il primo file, noteremo la presenza di una classe vuota (in realtà non lo è, per chi non conoscesse la programmazione ad oggetti la clausola “extends” implica il fatto che questa classe erediti i metodi da una classe madre). Aggiungiamo la seguente funzione:
static public function doOrder(){
$criteria = new Criteria();
$criteria->addAscendingOrderByColumn(self::TITOLO);
return self::doSelect($criteria);
}
da notare l’ordinamento fatto sul campo “TITOLO”, questo va modificato nei vari moduli in base alla colonna da considerare.
Adesso dobbiamo dire al controller di far riferimento alla giusta funzione, quindi modificheremo, rispettivamente:
apps/frontend/modules/articoli/actions/actions.class.php
apps/frontend/modules/autori/actions/actions.class.php
apps/frontend/modules/categorie/actions/actions.class.php
apps/frontend/modules/editori/actions/actions.class.php
apps/frontend/modules/libri/actions/actions.class.php
apps/frontend/modules/riviste/actions/actions.class.php
andremo a modificare l’azione “executeIndex()” in modo che si richiami la nuova funzione, quindi:
public function executeIndex(sfWebRequest $request)
{
$this->Articolis = ArticoliPeer::doOrder();
}