Upload
asmir-mustafic
View
2.159
Download
5
Embed Size (px)
Citation preview
1Asmir Mustafic - PUG 2011
ATALTemplate Attribute Language
(per PHP)
Asmir Mustafic
(per PHP)
18/07/11
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
Perche ATal?
� Ci sono tanti altri template engine, perche usare ATal?
3
ATal?
� Un solo esempio…
18/07/11Asmir Mustafic - PUG 2011
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
ATal5
<ul t:if="count($utenti)">
<li t:foreach="$utenti as $u">{$u->nome}</li>
</ul>
18/07/11Asmir Mustafic - PUG 2011
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
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
ATal8
Uso e caratteristiche
ATal
18/07/11Asmir Mustafic - PUG 2011
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
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
Contenuto11
<textarea name="foobar" t:content="$contTextArea"/>
<textarea name="foobar">{$contTextArea}</textarea>
18/07/11Asmir Mustafic - PUG 2011
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
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
Cicli14
<option t:foreach="$links as $link t:content="$link->titolo"/>
18/07/11Asmir Mustafic - PUG 2011
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
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
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
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
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="<|>">
//<![CDATA[//<![CDATA[
var a = function(s){ alert(s); };
a(<$fooBar>);
//]]>
</script>
18/07/11Asmir Mustafic - PUG 2011
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
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
22
Grazie!
18/07/11Asmir Mustafic - PUG 2011