La piattaforma | Caratteristiche | Sviluppo | Scarica | Licenza |EnglishItalian

SourceForge.net Logo

Support Wedgefish development

Il sistema di templating

Nello sviluppo convenzionale con PHP, ogni pagina dinamica è di solito composta da codice PHP e contenuto statico alternati nel corpo di un unico file di script.

Quando il grafico ed il programmatore sono due persone distinte (o semplicemente quando un grafico necessita di modificare una pagina già creata da altri) insorgono svariati problemi di non facile risoluzione.
Infatti è consuetudine per molti grafici, senza conoscenze di programmazione, modificare le pagine web utilizzando esclusivamente editor HTML visuali, senza considerare la presenza di righe di codice PHP sparse tra un elemento e l'altro del documento HTML, con il risultato di alterare il comportamento dinamico della pagina, danneggiandone le funzionalità o causando errori PHP che richiedono non poco tempo per essere individuati e risolti.

Wedgefish risolve questo problema separando rigorosamente il template HTML ed il codice PHP utilizzati per generare dinamicamente l'output corrispondente ad un determinato URL, mantenendoli in due files distinti.
Il codice HTML/XHTML viene memorizzato nella "view", un file statico che non contiene alcuna riga di codice PHP, e può quindi essere liberamente modificato utilizzato qualunque editor HTML, come Quanta, NVU, Dreamweaver o Frontpage, mentre il codice PHP viene mantenuto nel "controller", un file che contiene solamente righe di programma.
Questo significa che i templates HTML non conterranno nemmeno una riga di codice PHP!  Dimenticate i lunghi, disordinati e illeggibili files PHP intervallati da tags HTML che richiedono specifiche conoscenze di programmazione per essere modificati.  Il grafico ed il programmatore potranno finalmente lavorare in maniera produttiva, senza disturbare il proprio reciproco lavoro.
Per la stessa ragione, Wedgefish non introduce alcun nuovo "linguaggio di template" che richiederebbe un lungo periodo di apprendimento da parte di programmatori e grafici evoluti, per poi finire per essere ugualmente sovrascritto ed alterato inavvertitamente utilizzando editor HTML visuali.
Un altro vantaggio di questa separazione è che lo stesso controller può essere riutilizzato con differenti view, come la stessa view può essere impiegata con diversi controllers.
I due tipi di files vengono memorizzati in cartelle differenti, alle quali è quindi possibile attribuire privilegi di accesso separati a livello di sistema (ad esempio con FTP): quindi è possibile impedire a grafici non di fiducia di introdurre codice eseguibile ed eseguirlo nella piattaforma.
Ogni URL definito nel WODBMS viene abbinato ad una view e ad un controller, che vengono combinati assieme dal compilatore di templates, il quale genera uno script PHP che viene memorizzato nella cache del codice.  Lo script generato (un normale script PHP, simile a quanto sarebbe stato creato a mano da un programmatore) viene successivamente eseguito per restituire il contenuto dinamico richiesto.

È interessante notare come questo implichi nella pratica poche differenze per lo sviluppatore PHP rispetto al modello di sviluppo tradizionale: è ancora possibile identificare una pagina web con il suo script, a differenza di quanto accade con molti altri sistemi analoghi basati su utilizzo di temi. La differenza principale è che il contenuto statico viene memorizzato in un secondo file, posto in una cartella separata.
I vantaggi sono tuttavia molteplici: lo stesso script può essere riutilizzato per più pagine, senza bisogno di copiarlo come avverrebbe di solito; inoltre l'URL può essere definito a piacere, senza dover utilizzare l'estensione .php, e potendo anche fare a meno di qualunque estensione.

Wedgefish non obbliga quindi a creare un nuovo tema, o ad estenderne uno esistente, solo per poter personalizzare la grafica di un sito: sebbene sia possibile partire da un template (l'equivalente di un tema) per creare il proprio sito, è possibile utilizzarlo solo per delle parti di esso (come l'amministrazione), rendendone completamente indipendenti altre (come le pagine pubbliche), potendo decidere questo per ciascun URL, oppure partire completamente da zero. Questo aiuta ad ottenere da subito risultati tangibili, senza obbligare a scrivere in forma riutilizzabile elementi grafici e di layout che verranno con tutta probabilità impiegati in un solo sito, sebbene sia possibile successivamente, se lo si desidera, ricavare un nuovo template dal lavoro svolto per un sito, che potrà poi essere utilizzato come base per altri siti.

Sostituzione di variabili

In qualunque punto di una view, è possibile inserire liberamente variabili che verranno sostituite dal loro valore da parte del controller.
Se una variabile viene inserita più volte, tutte le sue occorrenze verranno sostituite dal suo valore.
Le variabili iniziano con $ ed un carattere alfabetico (ad esempio $price). Può essere utilizzato qualunque nome, in qualunque lingua, anche se è raccomandato, per facilitare modifiche da parte di altri sviluppatori, l'utilizzo della lingua inglese.
Esistono alcune variabili speciali, il cui nome inizia con $WOS_, che possono essere impiegate per visualizzare informazioni particolari concernenti un sito:

  • $WOS_WEBSITE_NAME - restituisce il nome del sito web
  • $WOS_HTTP_REFERER - restituisce l'URI della pagina dalla quale, cliccando su un link, si è arrivati alla pagina attuale (header HTTP_REFERER della richiesta HTTP)
  • $WOS_USERNAME - restituisce il nome breve di un eventuale utente che si è autenticato sul sito

Per impostare il valore di una variabile su una view, al di fuori di qualunque oggetto della pagina (vedere di seguito), è necessario utilizzare nel controller la funzione wos_view_set_variable, come nel seguente esempio:

wos_view_set_variable('nome', $valore);

dove nome è il nome della variabile, e $valore il valore che si vuole visualizzare.
Non è possibile impostare esplicitamente il valore delle variabili il cui nome inizia con "WOS_".

Alternativamente, se si desidera impostare più variabili in una volta sola (con un leggero guadagno in termini di prestazioni) è possibile utilizzare la funzione wos_view_set_variables, con questa sintassi:

wos_view_set_variables(array('nome1' => $valore1, 'nome2' => $valore2));

Controllo dinamico di oggetti HTML/XHTML

Nei linguaggi di markup HTML, XML e XHTML, è possibile marcare qualunque oggetto con un identificatore, al fine di farvi riferimento in seguito, come in questo esempio:

<div id="oggetto">$message</div>

Il compilatore di templates di Wedgefish interpreta come oggetti dinamici lato server tutti quelli il cui valore della proprietà "id" inizi con il prefisso "WOS_" oppure "wos_".
Tali oggetti sono gestibili dal controller, che può decidere di visualizzarli una o più volte, impostando le loro variabili al loro interno per ciascuna ripetizione. In questo modo è possibile realizzare costrutti dinamici (cicli e condizioni) senza dover inserire istruzioni if, for e while attorno al contenuto, come avverrebbe utilizzando la tradizionale programmazione PHP o altri sistemi di template.

Di default, gli oggetti marcati con il prefisso WOS_ non verranno inclusi nell'output fornito al browser e risulteranno quindi nascosti (molto utile nel caso in cui determinati blocchi debbano essere visualizzati solo al verificarsi di una data condizione, quali messaggi di avvertimento).

Il controller può decidere di visualizzare un oggetto e valorizzare le sue variabili utilizzando questa semplice sintassi:

wos_view_add_element('id', array('variabile' => $valore));

Gli attributi "id" aventi prefisso "WOS_" (scritto in maiuscolo) verranno rimossi dall'output restituito al browser, per ridurre la dimensione del documento ed evitare soprattutto che lo stesso id venga ripetuto più volte, causando errori di validazione.
Qualora l'oggetto contenente la proprietà "id" sia un <div> ed esso non contenga alcun'altra proprietà, anch'esso verrà rimosso dall'output, mantenendo quindi solo il suo contenuto.
In caso sia necessario mantenere l'attributo "id" nel codice della pagina (perché utilizzato, ad esempio, da qualche CSS o JavaScript), sempre a patto che l'oggetto venga visualizzato una sola volta e non ripetuto, è sufficiente utilizzare il prefisso "wos_" (scritto stavolta in minuscolo). In questo caso, il valore della proprietà id restituito al browser non avrà il prefisso "wos_". Se la tag è un <div>, essa verrà quindi mantenuta.
È importante ricordare che il nome dell'oggetto accessibile al controller non avrà mai, in qualunque caso, alcun prefisso, né "WOS_" ne "wos_".

Gli oggetti possono anche essere nidificati uno dentro l'altro. In questo caso, è possibile accedervi ottenendo dapprima un riferimento all'oggetto di livello superiore, quindi chiamando i metodi della classe WOSElement per impostarne le variabili e visualizzare o ripetere gli elementi contenuti.

Notare che la proprietà "id" ha la particolarità di poter essere facilmente impostata, oltre che modificando il sorgente della view, anche con la maggior parte degli editor visuali, cliccando sull'elemento (riga, paragrafo, div ecc...) e selezionando un menu a comparsa.

Inclusione di view e controller secondari

Spesso un sito, benché utilizzi view diverse per le sue varie sezioni, presenta elementi identici su tutte le sue pagine, come una barra di navigazione generata dinamicamente a partire dall'elenco delle categorie e delle pagine.
Se si desidera poter modificare agevolmente le view tramite un editor grafico, potrebbe essere desiderabile ripetere il codice di tali elementi su ciascuna di esse. Tuttavia, quando il codice dell'elemento è piuttosto complesso, potrebbe essere preferibile utilizzare un file separato per la sua view ed il suo controller, ed includerli in una posizione della view principale.

Questo può essere fatto molto facilmente, inserendo una variabile nella view principale e caricandone il contenuto, utilizzando la funzione wos_view_subtemplate, come nel seguente esempio:

$menu = wos_view_subtemplate('controllers/menu.php', 'views/menu.html');
wos_view_set_variable('menu', $menu);
 

Wedgefish - Copyright © 2005-2008 by Massimiliano Alessandri
This is free software, and you may redistribute it under the Affero GPL.
Wedgefish comes with absolutely no warranty; for details, see the license.
You may download the currently running source code for this software.