Di seguito sono riportati alcuni esempi che renderanno più chiaro come sviluppare templates dinamici con Wedgefish.
Esempio 1: HTML visualizzato a determinate condizioni
Immaginiamo di avere il seguente codice HTML nella view associata all'URL della nostra pagina:
<div id="WOS_warning">$message</div>
Il controller potrà decidere di visualizzare questo oggetto solo al verificarsi di una data condizione, e mantenerlo nascosto in caso contrario:
if(!wos_is_logged_in())
wos_view_add_element('warning', array(
'message' => 'Per favore entra come utente registrato per inviare i tuoi commenti'
));
L'output risultante, in caso l'utente non abbia effettuato il login, sarà il seguente:
Per favore entra come utente registrato per inviare i tuoi commenti
Qualora si desideri una particolare formattazione per tale messaggio, sarà possibile aggiungere un attributo class alla tag div, oppure utilizzare come id "wos_warning" e impostare una classe CSS di nome #warning nel foglio di stile della pagina.
Esempio 2: HTML ripetuto ciclicamente
Immaginiamo di voler visualizzare l'elenco delle categorie dei prodotti di un sito e-commerce, sottoforma di un elenco numerato.
Provvederemo quindi ad inserire il seguente codice HTML nella view associata all'URL della nostra pagina, nella posizione desiderata:
<ol>
<li id="WOS_category"><a href="$url">$title</a>
</ol>
Ora dobbiamo aggiungere alcune righe al controller della pagina, per recuperare dal WODBMS l'elenco delle categorie ed inserirlo nella tag <li>, ripetendola tante volte quante sono le categorie da visualizzare:
/*
Leggi l'elenco delle categorie dal WODBMS, ordinato per titolo, escludendo quelle nascoste, e restituisci per ciascuna categoria l'URL della sua pagina ed il suo titolo localizzato nella lingua selezionata o in quella di default del browser.
Nota: Questo esempio presuppone che sia stata definita una classe di nome "Categories" nel WODBMS del sito corrente, con i campi appropriati.
*/
$categories = wos_query_items('Categories', 'wos_url,title', 'wos_visible', 2);
// Per ciascuna categoria, ripeti l'elemento marcato con id="WOS_category"
foreach($categories as $item_id => $fields) {
wos_view_add_element('category', array(
'url' => wos_get_relative_url($fields['wos_url']),
'title' => $fields['title']
));
}
Questa tecnica può essere utilizzata qualunque siano i dati da leggere e qualunque sia il layout in cui devono essere visualizzati. Con poche righe di codice è quindi possibile separare completamente il codice PHP dalla formattazione HTML scrivendo codice pulito e facile da mantenere.
Esempio 3: Oggetti nidificati con HTML condizionale e ciclico
Presenteremo ora un esempio più complesso, in grado di mostrare appieno le potenzialità del sistema di templating di Wedgefish.
Spesso, si desidera mostrare una sezione del documento solo se vi sono effettivamente dati da mostrare all'interno di essa.
Ad esempio, potremmo avere un pannello che mostra eventuali prodotti in promozione, che dovrebbe essere nascosto in caso non vi siano attualmente sconti in corso.
Inseriremo quindi nella nostra view un codice di questo tipo:
<div id="WOS_promotions">
<p>Questo è l'elenco dei prodotti attualmente in promozione:</p>
<ul>
<li id="WOS_product"><a href="$url">$title</a>$title</li>
</ul>
</div>
Ora, scriveremo il nostro controller per fare in modo di visualizzare l'elemento "WOS_promotions" solo se vi sono prodotti in promozione, e ripetendo, in questo caso, l'oggetto "WOS_product" tante volte quanti sono i prodotti:
/*
Leggi l'elenco dei prodotti in promozione dal WODBMS, secondo l'ordine stabilito nell'oggetto, e restituisci per ciascun prodotto l'URL della sua pagina ed il suo titolo localizzato nella lingua selezionata o in quella di default del browser
Nota: Questo esempio presuppone che sia stata definita una classe di nome "Product groups" nel WODBMS del sito corrente, che contenga un campo "product" relazionato con la classe "Products", che deve essere anch'essa esistente.
Inoltre la classe "Product groups" dovrà contenere un oggetto avente nome in inglese "Promotions", al quale sono stati relazionati i prodotti che si desidera visualizzare in offerta, nell'ordine desiderato.
*/
$promotions = wos_query_item('Product groups', 'product(wos_url),product(title)', wos_query_condition('title=%s', 'Promotions'));
// Memorizza in un array l'elenco degli URL dei prodotti in promozione
$url = wos_array_slice($menu, 'product*(wos_url)');
// Memorizza in un array l'elenco dei titoli localizzati dei prodotti in promozione
$titles = wos_array_slice($menu, 'product*(title)');
// Solo se vi è almeno un prodotto in promozione, mostra l'oggetto "WOS_promotions"
if(!empty($url)) {
$promotions =& wos_view_add_element('promotions');
foreach($url as $index => $u) {
$promotions->addElement('product', array(
'url' => wos_get_relative_url($u),
'title' => $titles[$index]
));
}
}
Questi sono solo alcuni esempi di come sviluppare codice per impaginare dati dinamici utilizzando il sistema di templating di Wedgefish.
Molti altri verranno pubblicati prossimamente.
Nota: Utilizzando le funzioni contenute nei "models" di determinati moduli, è possibile popolare automaticamente gli oggetti presenti nelle proprie view semplicemente passando ad esse alcuni parametri. Questo argomento verrà approfondito ulteriormente nella sezione "Moduli".



