AXURA s.r.l. - Vimercate (MI) - Tel. 039 66 74 86 / Fax. 02 700 568 121 / Email: info@axura.com
Axura - Web SolutionsL'universo di soluzioni che gravitano attorno al linguaggio PHP si espande ogni giorno di più, offrendoci solo l'imbarazzo della scelta sulla strada da intraprendere per affrontare una determinata esigenza: in questo articolo ne indichiamo una particolarmente interessante.
Grafici e Programmatori
Amore e odio: come per chitarristi e tastieristi in un gruppo musicale, il rapporto tra grafici e programmatori nel contesto di un team che sviluppa progetti per il web può ben essere sintetizzato dalla precedente espressione.
Sempre di più costretti a lavorare fianco a fianco, se fosse per i programmatori, i grafici dovrebbero tutti lavorare con un editor testuale (notepad, vi e simili) editando a mano il codice HTML, mentre se fosse per i grafici, i programmatori dovrebbero evitare di intervenire nei loro layout, studiati al pixel, come degli elefanti in un negozio di porcellane.
Come unire i due mondi, senza che i grafici svengano di fronte a blocchi di codice PHP e chiamate a database mischiate a codice HTML, e senza che i programmatori sudino freddo ogni volta che passano un file, magari frutto di notti insonni ad un grafico, perché questi ci metta mano?
Il Sacro Graal tanto agognato risiede nella scelta di separare “al meglio” il piano della logica e delle funzionalità da quello dell’aspetto grafico, riducendo i punti di contatto tra i due mondi: un minimo di interazione (al di là di quella che intercorre alla macchinetta del caffè) è comunque necessario, ma sicuramente questa scelta può migliorare la qualità della vita di entrambi i soggetti.
Come in ogni conciliazione, il primo passo spetta ad uno dei due soggetti, ed in questo caso sono proprio i programmatori che possono, aiutati dai potenti strumenti a loro disposizione, creare i presupposti per la separazione dei due piani.
Se i programmatori in questione fanno uso di PHP (sempre più conosciuto ed apprezzato non solo dagli addetti ai lavori), hanno dalla loro un “motore di template” tutto da scoprire: Smarty. (http://smarty.php.net)
Se non basta il nome a far venire l’acquolina in bocca ai più golosi, sicuramente ci riusciranno le funzionalità avanzate e le caratteristiche di tutto rispetto di quest’applicativo.
I motori di template: cosa sono?
I motori di template, in ambiente PHP così come in altri ambienti, sono delle classi che consentono ai grafici di interagire con il codice sviluppato dai programmatori senza per questo dover acquisire competenze specifiche sul linguaggio di programmazione utilizzato.
Un rapido esempio può rendere molto facilmente l’idea: supponiamo di dover visualizzare un elenco di risultati in una serie di righe, alternando il colore di riga, per facilitarne la lettura:
<table>
<tr bgcolor=”#cccccc”>
<td>Prima riga</td>
</tr>
<tr bgcolor=”#eeeeee”>
<td>Seconda riga</td>
</tr>
<tr bgcolor=”#cccccc”>
<td>Terza riga</td>
</tr>
</table>
Se i risultati che popolano le celle vengono estratti dinamicamente da database, il programmatore normalmente dovrà creare il codice necessario per gestire l’alternanza dei colori:
...
if ($myrow = mysql_fetch_array($result)) {
?>
<table>
<?php
$i = 0;
do {
$i++;
$colore = .#cccccc.;
if ($i % 2 == .0.) {
$colore = .#eeeeee.;
}
?>
<tr bgcolor=”<?php echo $colore; ?>”>
<td><?php echo $myrow[valore]; ?></td>
</tr>
<?php
} while ($myrow = mysql_fetch_array($result));
?>
</table>
<?php
}
...
Se il grafico non è ancora svenuto di fronte a questo blocco di codice, sicuramente lo farà quando il cliente (quello che .ha sempre ragione., ndA), gli chiederà di stravolgere la visualizzazione di questa parte di pagina.
Anticipando la sintassi di Smarty, il blocco sopra menzionato più o meno risulta così predisposto:
<table>
{cycle values=.#cccccc,#eeeeee. print="false"}
{section name=result loop=$id}
<tr bgcolor=.{cycle}.>
<td>{$valore[result]}</td>
</tr>
{/section}
</table>
Tralasciando l'economia in termini di codice della soluzione mostrata, è indubbio che la seconda sintassi ne favorisce la digestione da parte dei grafici e soprattutto da parte dei programmi di editing visuale di cui fanno spesso uso (con buona pace di chi li vorrebbe veder lavorare con i sopraccitati notepad, vi et similia): a tal proposito si segnala il link a questo contributo dove è disponibile un plug-in per Macromedia Dreamweaver per farlo interagire meglio con Smarty.
L.utilità di questa classe, anche per i programmatori, si rende ancora più evidente se apportiamo una piccola ma significativa modifica all.esempio precedente: se infatti il cliente (sempre quello di prima, ndA) richiede che in fase di visualizzazione i colori ad alternarsi siano tre e non più due, laddove non sia utilizzato Smarty il grafico deve ripassare il file al programmatore, attendere che questo intervenga modificando ed aggiungendo le poche righe di codice necessarie:
$i++;
$colore = .#cccccc.;
if ($i % 3 == .0.) {
$colore = .#eeeeee.;
}
if ($i % 3 == .1.) {
$colore = .#aaaaaa.;
}
?>
…
e poi il programmatore deve ripassare il codice nuovamente al grafico: questo duplice passaggio, potenzialmente assai dispersivo in termini di tempo (soprattutto se richiesto in concomitanza con il giorno libero del programmatore, come sembra avvenga nella maggior parte dei casi in base alla nota legge di murphy) e di risorse, è evitabile considerando che utilizzando smarty il grafico potrà semplicemente aggiungere il terzo colore all’elenco del ciclo:
…
{cycle values=”#cccccc,#eeeeee,#bbbbbb”
print="false"}
…
senza dover modificare altro.
Questo semplice esempio rende evidente i vantaggi che l’utilizzo di un motore di template come Smarty comporta nell’ambito del ciclo produttivo.
Smarty: un motore di template con una marcia in più
Rispetto ad altri motori di template realizzati in PHP, Smarty
è tra i più veloci, come risulta da un test
disponibile all’indirizzo http://www.phpinsider.com/benchmarks_phemplate/, (il
test viene effettuato in tempo reale, quindi i risultati possono
variare in base al traffico sul server).
Inoltre i template generati da Smarty sono compatibili con
acceleratori quali ZEND Cache (http://www.zend.com), PHP-Accelerator (http://www.php-accelerator.co.uk), Alternative Php
Cache (http://apc.communityconnect.com/) od il nostrano
AfterBurner (http://afterburner.bware.it/).
Un’innovativa caratteristica di Smarty è la pregenerazione del codice PHP derivante da un template: una volta generato un template infatti, questo viene “interpretato” da Smarty, e trasformato in normale codice PHP, in maniera completamente trasparente per l’utente: grazie a questo accorgimento, quando i visitatori chiameranno le pagine web così realizzate non ci sarà nessun sovraccarico legato alla sostituzione di variabili, ricostruzione di sezioni o quant’altro; tutto ciò ovviamente mantenendo inalterata la dinamicità delle pagine risultanti.
Un altro punto di forza è l’espandibilità di Smarty con dei PlugIn, nel rispetto di un’API ben documentata che consente agli sviluppatori di aggiungere e condividere nuove funzionalità alla classe base.
Inoltre, nella classe base sono disponibili una serie di “modificatori”, che consentono di intervenire con facilità sulle modalità di visualizzazione delle variabili passate nei template.
Per un esempio di come questi modificatori rispondano al meglio alle esigenze più comuni, prendiamo in considerazione il modificatore ‘truncate’, che consente di mostrare solo i primi ‘n’ caratteri di una stringa, con interessanti varianti: ecco il codice esemplificativo contenuto nella documentazione (n.b. il valore ‘n’ passato di default è 80):
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
Il cui output a video risulta:
Two Sisters Reunite after Eighteen Years at Checkout
Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
Come si può vedere, attraverso una sintassi molto immediata, è possibile controllare in maniera molto precisa la presentazione dei contenuti, e bisogna ricordare che è consentito combinare simultaneamente più ‘modificatori’, potendo quindi gestire anche le situazioni più complesse.
E’ evidente come sia comunque richiesto al grafico un minimo di apprendimento della sintassi di Smarty, ma sicuramente ci troviamo di fronte ad una curva di apprendimento inferiore rispetto a quella (già bassa di per sé, ndA) relativa a PHP.
Si conclude qui questa breve introduzione al motore di ‘template’ Smarty, non senza stuzzicare l’appetito ai più intrepidi, sottolineando le potenzialità del connubio tra Smarty ed un applicativo ‘database driven’, per la gestione di siti complessi ed applicativi particolari, liberando il programmatore dalle preoccupazioni relative all’interfaccia grafica ed il grafico dall’interazione con ‘arcani’ linguaggi di programmazione.
Per commenti, note, segnalazioni od altro è possibile usare la scheda contatti. |