Dwoo Template Engine

Dwoo Template Engine, è un nuovo Template Engine (ma va?!) per PHP.

Perchè un template engine?

Beh se si affronta un progetto un po’ più grande del sito di una salumeria, avere un approccio MVC è quanto mento d’obbligo.

Perchè non Smarty?

Smarty è senza dubbio un ottimo template engine, ed esiste da tanti anni da potersi considerare più che robusto. Tuttavia Smarty non viene aggiornato da parecchio, è basato ancora su PHP4 (che php.net ha dismesso e definito obsoleto!!), ed è rimasto lo stesso da più di due anni (non una sola riga di codice di aggiornamento!!). Va detto per onor di cronaca che la comunità attorno a smarty si è recentemente svegliata, annunciando la versione 3 del motore di templates. Peccato che abbiano rilasciato solo 2 aggiornamenti (il secondo è servito per correggere un bug introdotto nel primo O_o). Le premesse di smarty 3 sono più che ottime, ma è necessario OGGI un template engine al passo con gli aggiornamenti del PHP.

Dwoo?

Un po’ nascosto, ho scovato questo motore, dwoo appunto, di templates, le sue premesse non sono da meno rispetto a quelle di Smarty 3, con la sola differenza che Dwoo è pronto oggi, adesso. Vi riepilogo in breve le caratteristiche principali:

  • scritto interamente from scratch.
  • scritto completamente ad oggetti e in puro php5
  • UTF-8 ready
  • il codice compilato è completamente  E_STRICT compliant (vale a dire che php non lancerà nessun NOTICE durante la sua esecuzione)
  • Utilizza un sistema di cache dei templates simile a smarty
  • ha una sintassi smarty-like (a dirla tutta, riesce a compilare QUASI tutti i template scritti per smarty)
  • introduce una sintassi migliorata per rendere più scorrevole la scrittura del template
  • riconosce da solo i blocchi di javascrip e CSS ( grazie Dwoo!! )
  • implementa l’ereditarietà dei templates (grazie anche per questo)
  • estenderlo con dei plugins è molto semplice.

Scrivere il template è più facile e scorrevole; infatti per chiudere una tag si può usare {/} che ha la magica funzione di chiudere l’ultimo che è stato aperto

{foreach $array item}
  bla bla bla..
{/foreach}
 

oppure

{foreach $array item}
  bla bla bla..
{/}
 

Interessante anche la funzionalità del tag {dynamic} che indica al compilatore dwoo che quel blocco di template va rieseguito ad ogni invocazione e non deve essere cachato.

Questo contentuto sarà messo nella cache di dwoo
{dynamic}
  tutto quello che sta qui dentro non verrà mai cachato ma sarà
  reinterpretato ogni volta, molto utile per la gestione dei banner ad esempio.
{/}
anche questo contenuto finirà nella cache
 

La funzionalità più importante a mio avviso resta la capacità del compilatore di riconoscere javascript e css (per le parentesi graffe).
Con smarty era necessario chiudere il blocchi JS e CSS tra i tag {literal}…{/literal} che disabilitano l’interprete di template.

{literal}
.table {
  color: #FFF;
  border: 1px solid #000;
}
{/literal}
 

che può essere un compromesso accettabile.. ma spesso capita di dover passare in smarty dei valori che devono finire nel CSS o nel JS, e per fare ciò era necessario chiudere il tag {/literal} prima della variabile e riaprirlo subito dopo.

{literal}
.table {
  color: #FFF;
  border: {/literal}{$border_width}{literal}px solid #000;
}
{/literal}
 

Questo è decisamente un compromesso meno facile a cui scendere. Dwoo risolve questo dilemma semplicemente: ignorando i tags che dopo la parentesi quadra hanno uno spazio o un caratte accapo.
Il seguente blocco di codice in Dwoo è perfettamente legittimo.

{literal}
.table {
  color: #FFF;
  border: {$border_width}px solid #000;
}
{/literal}
 

Infine Dwoo introduce l’ereditarietà, che resta la caratteristica più interessante e potente del motore. Seguo un esempio per spiegarlo:


Un file base.tpl con questo contenuto:

<html>
  <head>
    <title>{block "title"}Il mio Sito{/block}</title>
    {* css etc. *}
  </head>
  <body>
    <h1>{block "page-title"}Default page title{/block}</h1>
    <div id="content">
      {block "content"}
        Benvenuto!!
      {/block}
    </div>
  </body>
</html>
 

Viene esteso dal file gallery.tpl, che sovrascrive il blocco “title”

{extends "base.html"}
{block "title"}
Photo Gallery
{/block}
 

Infine il file photo_gallery.tpl estende gallery.tpl sovrascrivendo altri blocchi di contenuto.

{extends "gallery_base.html"}
{block "title"}Home – {$dwoo.parent}{/block}
{block "page-title"}Gallery home{/block}
{block "content"}
  {foreach $images img}
    <img src="{$img.url}" alt="{$img.description}" />
  {/foreach}
{/block}
 

Compilando il file photo_gallery.tpl si ottiene il seguente output:

<html>
  <head>
    <title>Home – Gallery</title>
  </head>
  <body>
    <h1>Gallery home</h1>
    <div id="content">
      <img src="/example.jpg" alt="image" />
      <img src="/example2.jpg" alt="image" />
      <img src="/example3.jpg" alt="image" />
    </div>
  </body>
</html>
 

Ma è un linguaggio di programmazione, non è adatto a un grafico

Questa è l’accusa più ovvia da cui un motore come Dwoo deve difendersi. Tuttavia nei miei anni di lavoro non ho mai incontrato un grafico web (intendo il tizio che scrive HTML e CSS per far somigliare il più possibile una pagina web ad un file fatto con photoshop) che non avesse abbastanza nozioni per capire cosa è una variabile, un ciclo o una inclusione. Non vedo perchè non possa sforzarsi di capire anche cosa è l’ereditarietà.

In conclusione

Ho lavorato usando smarty per tanti anni (5?, 6?) e non lo avrei mai abbandonato se non avessi sentito così forte l’esigenza di un template engine costruito su una piattaforma non obsoleta. l’esigenza di refattorizzare esigeva un’evoluzione.

2 Responses to “Dwoo Template Engine”

  1. ytitageruzib Says:

    ytitageruzib…

    Salisbury Steak Recipes

  2. bynijujur Says:

    bynijujur…

    mattress denver co

Leave a Reply