PHP 5.3 Attribute Template Language (Template Engine)

  • 2,104 views
Uploaded on

Presentazione di ATal, un template engine pensato apposta per php. Ispirato a PHPTAL, ma con una filosofia tutta php. Supporta autoloading, plugin, modificatori, ereditarietà, ecc. Insomma da provare!

Presentazione di ATal, un template engine pensato apposta per php. Ispirato a PHPTAL, ma con una filosofia tutta php. Supporta autoloading, plugin, modificatori, ereditarietà, ecc. Insomma da provare!

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
2,104
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
5
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Asmir Mustafic - PUG 2011 1 ATAL Template Attribute Language (per PHP)18/07/11 Asmir Mustafic
  • 2. ATal Template Engine2 Template scritti in XML Istruzioni al TE tramite attributi Namespace separato Pensato per il mondo PHP Espressioni PHP like PHP 5.3 Completamente estensibile Asmir Mustafic - PUG 2011 18/07/11
  • 3. Perche ATal?3 Ci sono tanti altri template engine, perche usare ATal? Un solo esempio… Asmir Mustafic - PUG 2011 18/07/11
  • 4. Template engine tradizionali4 PHP Smarty/Dwoo/Twig <?php if (count($utenti)) { ?> {if count($utenti) } <ul> <ul> <?php foreach($utenti as $u) { ?> {foreach from=$utenti item=u} <li> <li> <?php echo escape($u->name); ?> {$u->name|escape} </li> </li> <?php } ?> {/foreach} </ul> </ul> <?php } ?> {/if} Asmir Mustafic - PUG 2011 18/07/11
  • 5. ATal5 <ul t:if="count($utenti)"> <li t:foreach="$utenti as $u">{$u->nome}</li> </ul> Asmir Mustafic - PUG 2011 18/07/11
  • 6. Caratteristiche di un Attribute Template Language6 Attributi per esprimere le istruzioni per il template engine. L’“inizio” e la “chiusura” delle istruzioni per il TE è “gratuita” grazie alla chiusura obbligatoria dei tag xml Non ci sono istruzioni riddondanti (if, endif, {/if}, {/loop} %end% {/foreach} ) Un istruzione scritta una sola volta Migliore supporto per editor WYSIWYG Gli editor solitamente ignorano gli attributi che non conoscono Aggiungono fastidiosi “?” per le istruzioni dei TE tradizionali Assicura che l’output prodotto sia XML valido Assenza di tag non chiusi, mal annidati, auto escape Asmir Mustafic - PUG 2011 18/07/11
  • 7. Caratteristiche di ATal7 Pensato per PHP (sintassi avanzata) Plugin, estensioni, filtri Modificatori e Pre-Modificatori anche su parametri Inclusione altri template (anche porzioni) Autoescape In continuo sviluppo Supporto per i namespace, closure, e autoloading. Se proprio non vi piace, allora provate PHPTal… Asmir Mustafic - PUG 2011 18/07/11
  • 8. 8 ATal Uso e caratteristiche Asmir Mustafic - PUG 2011 18/07/11
  • 9. Istanziazione9 require "atal/autoload.php"; require "xmldom/autoload.php"; require "pluginsys/autoload.php"; $tal = new goetasatalATalXHTML(); $tal->utenti = getElencoUtenti($res); // dati echo $tal->get("elenco.html"); Asmir Mustafic - PUG 2011 18/07/11
  • 10. Template10 Template scritti in XML Parser nativo DOM (non “finto” xml) Validabile tramite XMLSchema <html xmlns:t="ATal"> <head/> <body> <div t:if="rand(0,1)"> hello world </div> </body> </html> Asmir Mustafic - PUG 2011 18/07/11
  • 11. Contenuto11 <textarea name="foobar" t:content="$contTextArea"/> <textarea name="foobar">{$contTextArea}</textarea> Asmir Mustafic - PUG 2011 18/07/11
  • 12. Variabili, Modificatori e12 Pre-Modificatori -> {$u->nome|upper} {$u->nome|truncate:20} {$u->nome|upper|truncate:20:"..."} {$u->nome[$index]|substr:20|replace:’mr.’} {$u->nome[$index]|substr:20|find:$needle:into=$stack} {$u->name|upper|replace:"mr.":($u->title|lower)} {raw:$u->html} {raw:$u->html|replace:"h1":"h4"} Asmir Mustafic - PUG 2011 18/07/11
  • 13. Condizioni13 <a t:if="$link" href="{$link->href}"> {$link->titolo} </a> <a t:omit="!$href" href="{$href}"> Testo con link opzionale </a> Asmir Mustafic - PUG 2011 18/07/11
  • 14. Cicli14 <option t:foreach="$links as $link t:content="$link->titolo"/> Asmir Mustafic - PUG 2011 18/07/11
  • 15. Attributi15 <a href="{$link->href}" t:attr="$link->descr ? title=$link->descr"> - </a> <a href="{$link->href}" t:attr=" $link->descr ? title=$link->descr; $link->nolink ? href=null; "> - </a> <a class="customlink " t:attr-append="$link->ext ? class=‘esterno’ "> - </a> Asmir Mustafic - PUG 2011 18/07/11
  • 16. Composizione layout (inclusioni)16 <div t:if="$utente" t:include="utente.html"/> <div t:if="$utente" t:include="utente.html#anagrafica"/> <div t:if="$utente" t:include="utente.html#xpath://*[@class=anagrafica]/h4" /> Asmir Mustafic - PUG 2011 18/07/11
  • 17. Composizione layout (ereditarietà)17 <ul class="utenti"> <li t:foreach="$utenti as $u"> <ul t:block="nomeUtente">{$u->nome}</ul> <li> </ul> <html t:extends="utenti.html"> <ul t:block="nomeUtente" class="utente"> {$u->nome} {$u->cognome} </ul> </html> Asmir Mustafic - PUG 2011 18/07/11
  • 18. Raw output (ancora…)18 <div> {raw:$html} </div> <script type="text/javascript"> //<![CDATA[ {raw:$rawJs} //]]> </script> <script type="text/javascript" t:modifier="escape:javascript"> var utente = {$nomeUtenteUnsafe}; // ok </script> Asmir Mustafic - PUG 2011 18/07/11
  • 19. Conflitti19 <script type="text/javascript" t:no-conflicts=""> //<![CDATA[ var a = function(s){ alert(s); }; a(hello); //]]> </script> <script type="text/javascript" t:no-conflicts="&lt;|&gt;"> //<![CDATA[ var a = function(s){ alert(s); }; a(<$fooBar>); //]]> </script> Asmir Mustafic - PUG 2011 18/07/11
  • 20. I18n20 <h1 t:translate="">Il mio nuovo sito</h1> <h1 t:translate="nome=$arg">Articolo che parla di %nome</h1> <h1 t:translate-n="$quanti">Ci sono %0 bambini</h1> <img alt="descr" title="Descizione" t:translate-attr="alt;title"/> <img alt="Descizione di %nome" t:translate-attr="alt(nome=$arg)" /> Asmir Mustafic - PUG 2011 18/07/11
  • 21. In fine…21 Attualmente “usato in privato”, ma affidabile... Dove trovo tutta sta roba? http://opensource.mercuriosistemi.com ! A qualcuno interessa? Contributi? Documentazione? Codice? Farlo conoscere al grande pubblico? Altre Domande? Asmir Mustafic - PUG 2011 18/07/11
  • 22. 22 Grazie! Asmir Mustafic - PUG 2011 18/07/11