SlideShare a Scribd company logo
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

More Related Content

PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
PDF
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
PPT
Progetto di Basi di Dati
PDF
PHP: Un progetto open source cresciuto insieme al web
PDF
PHP Template Engine (introduzione)
PDF
2024 State of Marketing Report – by Hubspot
Storytelling For The Web: Integrate Storytelling in your Design Process
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
2024 Trend Updates: What Really Works In SEO & Content Marketing
Progetto di Basi di Dati
PHP: Un progetto open source cresciuto insieme al web
PHP Template Engine (introduzione)
2024 State of Marketing Report – by Hubspot
Ad

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