SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Asmir Mustafic - PUG 2011   1




                 ATAL
           Template Attribute Language
                   (per PHP)




18/07/11                                          Asmir Mustafic
ATal Template Engine
2


     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
Perche ATal?
3


     Ci sono tanti altri template engine, perche usare
     ATal?
     Un solo esempio…




                        Asmir Mustafic - PUG 2011   18/07/11
Template engine tradizionali
4



    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
ATal
5




    <ul t:if="count($utenti)">
          <li t:foreach="$utenti as $u">{$u->nome}</li>
    </ul>




                             Asmir Mustafic - PUG 2011   18/07/11
Caratteristiche di un
    Attribute Template Language
6


     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
Caratteristiche di ATal
7


     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   ATal
    Uso e caratteristiche




                     Asmir Mustafic - PUG 2011   18/07/11
Istanziazione
9


    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
Template
10


        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
Contenuto
11




     <textarea name="foobar" t:content="$contTextArea"/>

     <textarea name="foobar">{$contTextArea}</textarea>




                             Asmir Mustafic - PUG 2011   18/07/11
Variabili, Modificatori e
12
     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
Condizioni
13




     <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
Cicli
14




     <option t:foreach="$links as $link t:content="$link->titolo"/>




                              Asmir Mustafic - PUG 2011   18/07/11
Attributi
15




     <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
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
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
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
Conflitti
19




     <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
I18n
20



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




     Grazie!




     Asmir Mustafic - PUG 2011   18/07/11

Contenu connexe

Similaire à PHP 5.3 Attribute Template Language (Template Engine)

Facebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parteFacebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parteAngelo Iacubino
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQueryXeDotNet
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritornolordarthas
 

Similaire à PHP 5.3 Attribute Template Language (Template Engine) (7)

XSLT
XSLT XSLT
XSLT
 
Corso di php01
Corso di php01Corso di php01
Corso di php01
 
Facebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parteFacebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parte
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
Perl Template Toolkit
Perl Template ToolkitPerl Template Toolkit
Perl Template Toolkit
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 

PHP 5.3 Attribute Template Language (Template Engine)

  • 1. Asmir Mustafic - PUG 2011 1 ATAL Template Attribute Language (per PHP) 18/07/11 Asmir Mustafic
  • 2. ATal Template Engine 2 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 tradizionali 4 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. ATal 5 <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 Language 6 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 ATal 7 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. Istanziazione 9 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. Template 10 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. Contenuto 11 <textarea name="foobar" t:content="$contTextArea"/> <textarea name="foobar">{$contTextArea}</textarea> Asmir Mustafic - PUG 2011 18/07/11
  • 12. Variabili, Modificatori e 12 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. Condizioni 13 <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. Cicli 14 <option t:foreach="$links as $link t:content="$link->titolo"/> Asmir Mustafic - PUG 2011 18/07/11
  • 15. Attributi 15 <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. Conflitti 19 <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. I18n 20 <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