Successfully reported this slideshow.
Asmir Mustafic - PUG 2011   1                 ATAL           Template Attribute Language                   (per PHP)18/07/...
ATal Template Engine2     Template scritti in XML     Istruzioni al TE tramite     attributi       Namespace separato     ...
Perche ATal?3     Ci sono tanti altri template engine, perche usare     ATal?     Un solo esempio…                        ...
Template engine tradizionali4    PHP                                      Smarty/Dwoo/Twig    <?php if (count($utenti)) { ...
ATal5    <ul t:if="count($utenti)">          <li t:foreach="$utenti as $u">{$u->nome}</li>    </ul>                       ...
Caratteristiche di un    Attribute Template Language6     Attributi per esprimere le istruzioni per il template engine.   ...
Caratteristiche di ATal7     Pensato per PHP (sintassi avanzata)     Plugin, estensioni, filtri     Modificatori e Pre-Mod...
8   ATal    Uso e caratteristiche                     Asmir Mustafic - PUG 2011   18/07/11
Istanziazione9    require "atal/autoload.php";    require "xmldom/autoload.php";    require "pluginsys/autoload.php";    $...
Template10        Template scritti in XML        Parser nativo DOM (non “finto” xml)           Validabile tramite XMLSchem...
Contenuto11     <textarea name="foobar" t:content="$contTextArea"/>     <textarea name="foobar">{$contTextArea}</textarea>...
Variabili, Modificatori e12     Pre-Modificatori        ->     {$u->nome|upper}     {$u->nome|truncate:20}     {$u->nome|u...
Condizioni13     <a t:if="$link" href="{$link->href}">         {$link->titolo}     </a>     <a t:omit="!$href" href="{$hre...
Cicli14     <option t:foreach="$links as $link t:content="$link->titolo"/>                              Asmir Mustafic - P...
Attributi15     <a href="{$link->href}" t:attr="$link->descr ? title=$link->descr">         -     </a>     <a href="{$link...
Composizione layout (inclusioni)16     <div t:if="$utente" t:include="utente.html"/>     <div t:if="$utente" t:include="ut...
Composizione layout (ereditarietà)17     <ul class="utenti">         <li t:foreach="$utenti as $u">              <ul t:blo...
Raw output (ancora…)18     <div>       {raw:$html}     </div>     <script type="text/javascript">     //<![CDATA[     {raw...
Conflitti19     <script type="text/javascript" t:no-conflicts="">     //<![CDATA[     var a = function(s){ alert(s); };   ...
I18n20     <h1 t:translate="">Il mio nuovo sito</h1>     <h1 t:translate="nome=$arg">Articolo che parla di %nome</h1>     ...
In fine…21      Attualmente “usato in privato”, ma affidabile...      Dove trovo tutta sta roba?       http://opensource.m...
22     Grazie!     Asmir Mustafic - PUG 2011   18/07/11
Upcoming SlideShare
Loading in …5
×

PHP 5.3 Attribute Template Language (Template Engine)

2,364 views

Published 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!

Published in: Technology, Business
  • Be the first to like this

PHP 5.3 Attribute Template Language (Template Engine)

  1. 1. Asmir Mustafic - PUG 2011 1 ATAL Template Attribute Language (per PHP)18/07/11 Asmir Mustafic
  2. 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. 3. Perche ATal?3 Ci sono tanti altri template engine, perche usare ATal? Un solo esempio… Asmir Mustafic - PUG 2011 18/07/11
  4. 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. 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. 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. 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. 8 ATal Uso e caratteristiche Asmir Mustafic - PUG 2011 18/07/11
  9. 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. 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. 11. Contenuto11 <textarea name="foobar" t:content="$contTextArea"/> <textarea name="foobar">{$contTextArea}</textarea> Asmir Mustafic - PUG 2011 18/07/11
  12. 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. 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. 14. Cicli14 <option t:foreach="$links as $link t:content="$link->titolo"/> Asmir Mustafic - PUG 2011 18/07/11
  15. 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. 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. 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. 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. 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. 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. 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. 22 Grazie! Asmir Mustafic - PUG 2011 18/07/11

×