PHP 5.3 Attribute Template Language (Template Engine)

22
1 Asmir Mustafic - PUG 2011 ATAL Template Attribute Language (per PHP) Asmir Mustafic (per PHP) 18/07/11

Transcript of PHP 5.3 Attribute Template Language (Template Engine)

Page 1: PHP 5.3 Attribute Template Language (Template Engine)

1Asmir Mustafic - PUG 2011

ATALTemplate Attribute Language

(per PHP)

Asmir Mustafic

(per PHP)

18/07/11

Page 2: PHP 5.3 Attribute Template Language (Template Engine)

ATal Template Engine

� Template scritti in XML

� Istruzioni al TE tramite

2

� Istruzioni al TE tramite attributi� Namespace separato

� Pensato per il mondo PHP� Espressioni PHP like� Espressioni PHP like

� PHP 5.3

� Completamente estensibile

Asmir Mustafic - PUG 2011 18/07/11

Page 3: PHP 5.3 Attribute Template Language (Template Engine)

Perche ATal?

� Ci sono tanti altri template engine, perche usare ATal?

3

ATal?

� Un solo esempio…

18/07/11Asmir Mustafic - PUG 2011

Page 4: PHP 5.3 Attribute Template Language (Template Engine)

Template engine tradizionali

PHP Smarty/Dwoo/Twig

4

<?php if (count($utenti)) { ?>

<ul>

<?php foreach($utenti as $u) { ?>

<li>

<?php echo escape($u->name); ?>

</li>

<?php } ?>

</ul>

{if count($utenti) }

<ul>

{foreach from=$utenti item=u}

<li>

{$u->name|escape}

</li>

{/foreach}

</ul></ul>

<?php } ?>

</ul>

{/if}

18/07/11Asmir Mustafic - PUG 2011

Page 5: PHP 5.3 Attribute Template Language (Template Engine)

ATal5

<ul t:if="count($utenti)">

<li t:foreach="$utenti as $u">{$u->nome}</li>

</ul>

18/07/11Asmir Mustafic - PUG 2011

Page 6: PHP 5.3 Attribute Template Language (Template Engine)

Caratteristiche di un Attribute Template Language

� Attributi per esprimere le istruzioni per il template engine.

� L’“inizio” e la “chiusura” delle istruzioni per il TE è “gratuita”

6

� 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� Assicura che l’output prodotto sia XML valido

� Assenza di tag non chiusi, mal annidati, auto escape

18/07/11Asmir Mustafic - PUG 2011

Page 7: PHP 5.3 Attribute Template Language (Template Engine)

Caratteristiche di ATal

� Pensato per PHP (sintassi avanzata)

� Plugin, estensioni, filtri

7

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

18/07/11Asmir Mustafic - PUG 2011

Page 8: PHP 5.3 Attribute Template Language (Template Engine)

ATal8

Uso e caratteristiche

ATal

18/07/11Asmir Mustafic - PUG 2011

Page 9: PHP 5.3 Attribute Template Language (Template Engine)

Istanziazione

require "atal/autoload.php";

require "xmldom/autoload.php";

require "pluginsys/autoload.php";

9

require "pluginsys/autoload.php";

$tal = new \goetas\atal\ATalXHTML();

$tal->utenti = getElencoUtenti($res); // dati

echo $tal->get("elenco.html");

18/07/11Asmir Mustafic - PUG 2011

Page 10: PHP 5.3 Attribute Template Language (Template Engine)

Template

� Template scritti in XML

Parser nativo DOM (non “finto” xml)

10

� Parser nativo DOM (non “finto” xml)

� Validabile tramite XMLSchema

<html xmlns:t="ATal">

<head/>

<body><body>

<div t:if="rand(0,1)">

hello world

</div>

</body>

</html>

18/07/11Asmir Mustafic - PUG 2011

Page 11: PHP 5.3 Attribute Template Language (Template Engine)

Contenuto11

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

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

18/07/11Asmir Mustafic - PUG 2011

Page 12: PHP 5.3 Attribute Template Language (Template Engine)

Variabili, Modificatori e Pre-Modificatori

{$u->nome|upper}

12

->

{$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)}{$u->name|upper|replace:"mr.":($u->title|lower)}

{raw:$u->html}

{raw:$u->html|replace:"h1":"h4"}

18/07/11Asmir Mustafic - PUG 2011

Page 13: PHP 5.3 Attribute Template Language (Template Engine)

Condizioni13

<a t:if="$link" href="{$link->href}">

{$link->titolo}

</a>

<a t:omit="!$href" href="{$href}">

Testo con link opzionale

</a>

18/07/11Asmir Mustafic - PUG 2011

Page 14: PHP 5.3 Attribute Template Language (Template Engine)

Cicli14

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

18/07/11Asmir Mustafic - PUG 2011

Page 15: PHP 5.3 Attribute Template Language (Template Engine)

Attributi

<a href="{$link->href}" t:attr="$link->descr ? title=$link->descr">

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>

<a class="customlink " t:attr-append="$link->ext ? class=‘esterno’ ">

-

</a>

18/07/11Asmir Mustafic - PUG 2011

Page 16: PHP 5.3 Attribute Template Language (Template Engine)

Composizione layout (inclusioni)

<div t:if="$utente" t:include="utente.html"/>

16

<div t:if="$utente" t:include="utente.html#anagrafica"/>

<div t:if="$utente"

t:include="utente.html#xpath://*[@class='anagrafica']/h4" />

18/07/11Asmir Mustafic - PUG 2011

Page 17: PHP 5.3 Attribute Template Language (Template Engine)

Composizione layout (ereditarietà)

<ul class="utenti">

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

</html>

18/07/11Asmir Mustafic - PUG 2011

Page 18: PHP 5.3 Attribute Template Language (Template Engine)

Raw output (ancora…)

<div>

{raw:$html}

18

{raw:$html}

</div>

<script type="text/javascript">

//<![CDATA[

{raw:$rawJs}

//]]>

</script>

<script type="text/javascript" t:modifier="escape:'javascript'">

var utente = '{$nomeUtenteUnsafe}'; // ok

</script>

18/07/11Asmir Mustafic - PUG 2011

Page 19: PHP 5.3 Attribute Template Language (Template Engine)

Conflitti

<script type="text/javascript" t:no-conflicts="">

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[//<![CDATA[

var a = function(s){ alert(s); };

a(<$fooBar>);

//]]>

</script>

18/07/11Asmir Mustafic - PUG 2011

Page 20: PHP 5.3 Attribute Template Language (Template Engine)

I18n

<h1 t:translate="">Il mio nuovo sito</h1>

20

<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)" />

18/07/11Asmir Mustafic - PUG 2011

Page 21: PHP 5.3 Attribute Template Language (Template Engine)

In fine…

� Attualmente “usato in privato”, ma affidabile...

Dove trovo tutta sta roba?

21

� Dove trovo tutta sta roba?http://opensource.mercuriosistemi.com !

� A qualcuno interessa?

� Contributi? Documentazione? Codice?

� Farlo conoscere al grande pubblico?

� Altre Domande?

18/07/11Asmir Mustafic - PUG 2011

Page 22: PHP 5.3 Attribute Template Language (Template Engine)

22

Grazie!

18/07/11Asmir Mustafic - PUG 2011