ݺߣ

ݺߣShare a Scribd company logo
TEMPLATE ENGINES
(In ambiente PHP…)
Asmir Mustafic
Chi sono…
Asmir Mustafic
Lavoro nel settore IT dal 2004
2
Lavoro nel settore IT dal 2004
Socio di Mercurio Sistemi SRL (Lignano Sabbiadoro)
Fissato con PHP…
Asmir Mustafic - PUG 2011 18/07/11
Approccio classico con PHP…
<?php
$res = mysql_query("SELECT * FROM utenti");
?>
3
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
echo "<option
value='".$data["id"]."' "
.($sel==$data["id"]?'selected':'').">";
echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
echo "</option>";
}
echo "</select>";
Dati (SQL), Logica (PHP), Presentazione (HTML/CSS/JS)
Tutto in uno stesso “posto” (pagina, file, funzione…)!
Asmir Mustafic - PUG 2011 18/07/11
Problemi e soluzioni
Alcuni problemi Alcune soluzioni
4
Mancanza di divisione
tra:
Dati
logica di elaborazione
presentazione
Separare dati, logica
e presentazione!
(MVC?)
Model (ORM?)
Viste (Template Engine)presentazione
Difficile mantenibilità e
scalabilità del codice
Spaghetti code!
Viste (Template Engine)
Framework?
Asmir Mustafic - PUG 2011 18/07/11
Definizione (1/2)
Un Template engine è quel software progettato per
5
Un Template engine è quel software progettato per
elaborare “template” per produrre in output un
“documento” (Wikipedia)
Non mi piace…
Asmir Mustafic - PUG 2011 18/07/11
Definizione (2/2)
Un Template engine è quel componente software che
6
Un Template engine è quel componente software che
aiuta la separazione tra dati, logica e presentazione.
Meglio…?
Asmir Mustafic - PUG 2011 18/07/11
Tipologie di template engine
Statici
Pre-elaborazione (Dreamweaver, Frontpage…)
7
Pre-elaborazione (Dreamweaver, Frontpage…)
Lato server
Elaborazione sul server tramite linguaggi di
programmazione (
PHP[Smarty, Twig, PHPTAL,…]
Python[Kid, Django...]
…,Java, PERL…, .NET,…)
Lato clientLato client
Elaborazione con browser (quasi sempre in javascript)
XSLT? Lato server e client, ma verboso…
Asmir Mustafic - PUG 2011 18/07/11
Workflow
Dati
I dati devono essere
preparati e passati al TE
8
preparati e passati al TE
Templates
“Scheletri” nei quali il TE
inserirà i dati
Non semplice sostituzione di
variabili, ma anche loops,
condizioni, inclusioni
Template engine
Fonde i dati ed il template,Fonde i dati ed il template,
per produrre un documento in
output.
Output
A seconda del TE è un output
formattato, testo o binario
Asmir Mustafic - PUG 2011 18/07/11
PHP con template engine!
$engine = new TemplteEngine();
$engine->utenti = getElencoUtenti($res); // dati
Index.php
9
<select name='utente'>
{foreach $utenti as $utente}
<option value='{$utente[id]}'>{$utente[nome]}</option>
{/foreach}
</select>
$engine->utenti = getElencoUtenti($res); // dati
$engine->display("elenco.tpl");
elenco.tpl
<select name='utente'>
<option value='5'>Pippo</option>
<option value='6'>Pluto</option>
</select>
Output
Asmir Mustafic - PUG 2011 18/07/11
Vantaggi
Induce alla separazione tra i diversi livelli cocettuali
Aiuta ad adottare il pattern MVC ad esempio
Meno errori
10
Meno errori
Gli errori commessi nei sono isolati dall’resto dell’applicazione e sono
più faclimente individuabili
Cambiamenti
Si può cambiare completamente l’aspetto di un sito senza (qualsi)
intervenire sulla sua logica
Si può cambiare completamente lo scopo de alcune pagine di un sito
senza intervenire sulla sua logica (Elenco news in RSS)senza intervenire sulla sua logica (Elenco news in RSS)
Si può cambiare completamente la logica senza intervenire sui template
Aiuti/Automatismi
Escape automatico, attributi impliciti, macro,…e molto altro!
(dipende dall’implementazione del TE)
Asmir Mustafic - PUG 2011 18/07/11
Svantaggi
Altro linguaggio da imparare
Si aggiunge un altro livello all’intero sistema
11
Si aggiunge un altro livello all’intero sistema
Prestazioni
Errori
Ma penso che ne valga la pena…
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Variabili
Assegnamenti
12
Assegnamenti
Condizioni
Cicli
Inclusioni
Eriditarietà
Auto escapeAuto escape
I18n
Plugin
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Variabili
$engine = new TemplteEngine();
$engine->utente = "pippo";
Index.php
13
{$utente}
$engine->utente = "pippo";
$engine->display("template.tpl");
template.tpl
Pippo
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Modificatori
$engine = new TemplteEngine();
$engine->utente = "PIPPO";
Index.php
14
{$utente |lower|ucfirst}
$engine->utente = "PIPPO";
$engine->display("template.tpl");
template.tpl
Pippo
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Assegnamenti
$engine = new TemplteEngine();
$engine->numero = 5;
Index.php
15
{set $numero = $numero + 2 }
{$numero}
$engine->numero = 5;
$engine->display("template.tpl");
template.tpl
7
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Condizioni
$engine = new TemplteEngine();
$engine->condizione = true;
Index.php
16
<div>
{if $condizione}
OK
{/if}
</div>
$engine->condizione = true;
$engine->display("template.tpl");
template.tpl
<div>
OK
</div>
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Cicli
$engine = new TemplteEngine();
$engine->utenti = getElencoUtenti($res); // dati
Index.php
17
<select name='utente'>
{foreach $utenti as $utente}
<option value='{$utente.id}'>{$utente.nome}</option>
{/foreach}
</select>
$engine->utenti = getElencoUtenti($res); // dati
$engine->display("template.tpl");
template.tpl
<select name='utente'>
<option value='5'>Pippo</option>
<option value='6'>Pluto</option>
</select>
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Inclusioni
$engine = new TemplteEngine();
$engine->display("template.tpl");
Index.php
18
$engine->display("template.tpl");
<div>
{include "template-mini.tpl"}
</div>
template.tpl
<strong>
Sono un altro template
template-mini.tpl
<div>
<strong>
Sono un altro template
</strong>
</div>
Output
Sono un altro template
</strong>
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Ereditarietà
<title>
{block titolo}
template-base.tpl
19
Index.php
{extends "template-base.tpl"}
{block titolo}
Benvenuti alla pagina 5 del sito di pippo
{/block}
Template-dettagliato.tpl
{block titolo}
Benvenuti al sito di pippo
{/block}
</title>
$engine = new TemplateEngine();
$engine->display("template-dettagliato.tpl");
Index.php
<title> Benvenuti alla pagina 5 del sito di pippo </title>
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Auto escape
$engine = new TemplteEngine();
$engine->utente = "pip<>po";
Index.php
20
{$utente}
$engine->utente = "pip<>po";
$engine->display("template.tpl");
template.tpl
pip&lt;&gt;po
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
I18n
$engine = new TemplteEngine();
$engine->setLanguage("en");
Index.php
21
{i18n}Ciao mondo{/i18n}
$engine->setLanguage("en");
$engine->setTranslationDir("da/qualche/parte");
$engine->display("template.tpl");
template.tpl
Hello world
Output
Asmir Mustafic - PUG 2011 18/07/11
Caratteristiche comuni
Plugin
Template engine minimali
Tutte le funzionalità sono aggiunte tramite plugin
22
Tutte le funzionalità sono aggiunte tramite plugin
Anche quelle “quasi” core
Un template engine senza plugin è fine a se
stesso…
Asmir Mustafic - PUG 2011 18/07/11
Riepilogo
$engine = new TemplteEngine();
$engine->utenti = getElencoUtenti($res); // dati
Index.php
23
<select name='utente' {attr-if $condizione class='combo'}>
{foreach $utenti as $utente}
{if $utente[id] % 2 == 0}
<option value='{$utente[id]}'>{$utente[nome]|upper}</option>
{/if}
{/foreach}
$engine->utenti = getElencoUtenti($res); // dati
$engine->display("template.tpl");
template.tpl
{/foreach}
</select>
<select name='utente' class='combo'>
<option value='2'>PIPPO</option>
</select>
Output
Asmir Mustafic - PUG 2011 18/07/11
Alcuni Template Engine PHP
(1/2)
Smarty
il primo ed il più famoso (v2 / v3)
24
il primo ed il più famoso (v2 / v3)
Dwoo
riscrittura di Smarty in PHP 5
Twig
Ispirato a Django, simile a Smarty ma più moderno e potente,
integrato in Simfony
Tanti, tanti altri, tutti molto simili tra loro…Tanti, tanti altri, tutti molto simili tra loro…
Asmir Mustafic - PUG 2011 18/07/11
Alcuni Template Engine PHP
(2/2)
Template scritti in linguaggio XML
PHPTAL
25
PHPTAL
Istruzioni unicamente con attributi
Basato sullo standard di Zope
Open Power Template
Simile a PHPTAL , forse ancora più “Strict”
Sintassi migliorata, sfrutta anche elementi oltre agli attributi
ATAL (Vedremo più avanti)ATAL (Vedremo più avanti)
Ispirato a PHPTAL ma pensato appositamente per PHP
Asmir Mustafic - PUG 2011 18/07/11
Quale scegliere?
Ogni caso hai il suo template engine!
Consiglio
26
Consiglio
Se dovete generare documenti basati su XML scegliete
un template engine basato su XML (anche HTML4 è
“quasi” XML…).
Perche ? Lo vedremo più avanti…
Anche se sempre, bisogna usare il buon senso…Anche se sempre, bisogna usare il buon senso…
Asmir Mustafic - PUG 2011 18/07/11
Indirizzi
Smarty (http://en.wikipedia.org/wiki/Smarty )
Twig (http://www.twig-project.org/ )
27
Twig (http://www.twig-project.org/ )
Dwoo (http://dwoo.org/ )
Phptal (http://phptal.org/ )
Open Power Template (http://www.invenzzia.org )
ATal (http://opensource.mercuriosistemi.com/ )ATal (http://opensource.mercuriosistemi.com/ )
Promising TE
(http://www.webresourcesdepot.com/19-promising-
php-template-engines/ ) 18/07/11Asmir M ustafic - PUG 2011
Grazie!
28
Grazie!
Ma non è finita…
Asmir Mustafic - PUG 2011 18/07/11
Ad

Recommended

PHP 5.3 Attribute Template Language (Template Engine)
PHP 5.3 Attribute Template Language (Template Engine)
Asmir Mustafic
Fare con Zend Framework 2 ciò che facevo con ZF1
Fare con Zend Framework 2 ciò che facevo con ZF1
Steve Maraspin
Php mysql3
Php mysql3
orestJump
Drupal 7 : theming avanzato
Drupal 7 : theming avanzato
Twinbit
Php mysql e cms
Php mysql e cms
orestJump
Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
Zend by Rogue Wave Software
Levate l'ancora! Rotte senza problemi con ZF2
Levate l'ancora! Rotte senza problemi con ZF2
Diego Drigani
Sinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.x
Sinfonia in Domino RE - Integrazione Symphony e Lotus Notes 8.x
Dominopoint - Italian Lotus User Group
Perl Template Toolkit
Perl Template Toolkit
Stefano Rodighiero
Corso di php01
Corso di php01
Emilia Calzetta
Php e database: php mysql
Php e database: php mysql
High Secondary School
jQuery e i suoi plugin
jQuery e i suoi plugin
Pasquale Puzio
Facebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parte
Angelo Iacubino
PHP
PHP
Emilia Calzetta
GraphDB in PHP @ Codemotion 03/23/2012
GraphDB in PHP @ Codemotion 03/23/2012
Alessandro Nadalin
More developers on DevOps with Docker orchestration
More developers on DevOps with Docker orchestration
Giulio De Donato
PHP: Un progetto open source cresciuto insieme al web
PHP: Un progetto open source cresciuto insieme al web
Asmir Mustafic
Symfony 2 : chapitre 2 - Les vues en Twig
Abdelkader Rhouati
TWIG: the flexible, fast and secure template language for PHP
TWIG: the flexible, fast and secure template language for PHP
Cesare D'Amico
Context oriented architecture - Put the boundary in the right place
Context oriented architecture - Put the boundary in the right place
Leonardo Proietti
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
SMAU
Corso PHP ENAIP - lezione #02 - 21/01/2014
Corso PHP ENAIP - lezione #02 - 21/01/2014
Matteo Moro
App Engine + Python
App Engine + Python
Simone Marzola
Wordpress as a Framework
Wordpress as a Framework
Paolo Cargnin
Introduzione al PHP
Introduzione al PHP
GiancarloRomano1
Web 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggi
Alessandro Cinelli (cirpo)
Codemotion workshop
Codemotion workshop
eugenio pombi
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft Corso Di Php Parte 1
Gianfranco Fedele

More Related Content

What's hot (6)

Perl Template Toolkit
Perl Template Toolkit
Stefano Rodighiero
Corso di php01
Corso di php01
Emilia Calzetta
Php e database: php mysql
Php e database: php mysql
High Secondary School
jQuery e i suoi plugin
jQuery e i suoi plugin
Pasquale Puzio
Facebook Developer Garage Venice 2 parte
Facebook Developer Garage Venice 2 parte
Angelo Iacubino
PHP
PHP
Emilia Calzetta

Viewers also liked (6)

GraphDB in PHP @ Codemotion 03/23/2012
GraphDB in PHP @ Codemotion 03/23/2012
Alessandro Nadalin
More developers on DevOps with Docker orchestration
More developers on DevOps with Docker orchestration
Giulio De Donato
PHP: Un progetto open source cresciuto insieme al web
PHP: Un progetto open source cresciuto insieme al web
Asmir Mustafic
Symfony 2 : chapitre 2 - Les vues en Twig
Abdelkader Rhouati
TWIG: the flexible, fast and secure template language for PHP
TWIG: the flexible, fast and secure template language for PHP
Cesare D'Amico
Context oriented architecture - Put the boundary in the right place
Context oriented architecture - Put the boundary in the right place
Leonardo Proietti
GraphDB in PHP @ Codemotion 03/23/2012
GraphDB in PHP @ Codemotion 03/23/2012
Alessandro Nadalin
More developers on DevOps with Docker orchestration
More developers on DevOps with Docker orchestration
Giulio De Donato
PHP: Un progetto open source cresciuto insieme al web
PHP: Un progetto open source cresciuto insieme al web
Asmir Mustafic
Symfony 2 : chapitre 2 - Les vues en Twig
Abdelkader Rhouati
TWIG: the flexible, fast and secure template language for PHP
TWIG: the flexible, fast and secure template language for PHP
Cesare D'Amico
Context oriented architecture - Put the boundary in the right place
Context oriented architecture - Put the boundary in the right place
Leonardo Proietti
Ad

Similar to PHP Template Engine (introduzione) (20)

Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
SMAU
Corso PHP ENAIP - lezione #02 - 21/01/2014
Corso PHP ENAIP - lezione #02 - 21/01/2014
Matteo Moro
App Engine + Python
App Engine + Python
Simone Marzola
Wordpress as a Framework
Wordpress as a Framework
Paolo Cargnin
Introduzione al PHP
Introduzione al PHP
GiancarloRomano1
Web 2.0 sviluppare e ottimizzare oggi
Web 2.0 sviluppare e ottimizzare oggi
Alessandro Cinelli (cirpo)
Codemotion workshop
Codemotion workshop
eugenio pombi
Gianfrasoft Corso Di Php Parte 1
Gianfrasoft Corso Di Php Parte 1
Gianfranco Fedele
Php for ASP.NET Developers
Php for ASP.NET Developers
Emanuele Bartolesi
Presentazione wi400 i5
Presentazione wi400 i5
S.I.R.I. Informatica s.r.l.
Corso: Creare siti con Joomla - lezione 1
Corso: Creare siti con Joomla - lezione 1
Ludwig Bargagli
Sviluppo di applicazioni web con Django - - Linux Day 2011
Sviluppo di applicazioni web con Django - - Linux Day 2011
Mauro Barattin
Link. php [santi caltabiano]
Link. php [santi caltabiano]
santi caltabiano
Lamp Ld2008
Lamp Ld2008
Università di Siena
Presentazione Corso - Parte 3
Presentazione Corso - Parte 3
Giorgio Carpoca
Programmazione per il web - WebWord
Programmazione per il web - WebWord
Alartzero
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
bsdlover
Introduzione alle Tecnlogie Web v1.0
Introduzione alle Tecnlogie Web v1.0
Paolo Quartarone
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
Smau milano 2012 massimiliano del cero
Smau milano 2012 massimiliano del cero
SMAU
Corso PHP ENAIP - lezione #02 - 21/01/2014
Corso PHP ENAIP - lezione #02 - 21/01/2014
Matteo Moro
Corso: Creare siti con Joomla - lezione 1
Corso: Creare siti con Joomla - lezione 1
Ludwig Bargagli
Sviluppo di applicazioni web con Django - - Linux Day 2011
Sviluppo di applicazioni web con Django - - Linux Day 2011
Mauro Barattin
Programmazione per il web - WebWord
Programmazione per il web - WebWord
Alartzero
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
bsdlover
Introduzione alle Tecnlogie Web v1.0
Introduzione alle Tecnlogie Web v1.0
Paolo Quartarone
Ad

PHP Template Engine (introduzione)

  • 1. TEMPLATE ENGINES (In ambiente PHP…) Asmir Mustafic
  • 2. Chi sono… Asmir Mustafic Lavoro nel settore IT dal 2004 2 Lavoro nel settore IT dal 2004 Socio di Mercurio Sistemi SRL (Lignano Sabbiadoro) Fissato con PHP… Asmir Mustafic - PUG 2011 18/07/11
  • 3. Approccio classico con PHP… <?php $res = mysql_query("SELECT * FROM utenti"); ?> 3 ?> <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>"; Dati (SQL), Logica (PHP), Presentazione (HTML/CSS/JS) Tutto in uno stesso “posto” (pagina, file, funzione…)! Asmir Mustafic - PUG 2011 18/07/11
  • 4. Problemi e soluzioni Alcuni problemi Alcune soluzioni 4 Mancanza di divisione tra: Dati logica di elaborazione presentazione Separare dati, logica e presentazione! (MVC?) Model (ORM?) Viste (Template Engine)presentazione Difficile mantenibilità e scalabilità del codice Spaghetti code! Viste (Template Engine) Framework? Asmir Mustafic - PUG 2011 18/07/11
  • 5. Definizione (1/2) Un Template engine è quel software progettato per 5 Un Template engine è quel software progettato per elaborare “template” per produrre in output un “documento” (Wikipedia) Non mi piace… Asmir Mustafic - PUG 2011 18/07/11
  • 6. Definizione (2/2) Un Template engine è quel componente software che 6 Un Template engine è quel componente software che aiuta la separazione tra dati, logica e presentazione. Meglio…? Asmir Mustafic - PUG 2011 18/07/11
  • 7. Tipologie di template engine Statici Pre-elaborazione (Dreamweaver, Frontpage…) 7 Pre-elaborazione (Dreamweaver, Frontpage…) Lato server Elaborazione sul server tramite linguaggi di programmazione ( PHP[Smarty, Twig, PHPTAL,…] Python[Kid, Django...] …,Java, PERL…, .NET,…) Lato clientLato client Elaborazione con browser (quasi sempre in javascript) XSLT? Lato server e client, ma verboso… Asmir Mustafic - PUG 2011 18/07/11
  • 8. Workflow Dati I dati devono essere preparati e passati al TE 8 preparati e passati al TE Templates “Scheletri” nei quali il TE inserirà i dati Non semplice sostituzione di variabili, ma anche loops, condizioni, inclusioni Template engine Fonde i dati ed il template,Fonde i dati ed il template, per produrre un documento in output. Output A seconda del TE è un output formattato, testo o binario Asmir Mustafic - PUG 2011 18/07/11
  • 9. PHP con template engine! $engine = new TemplteEngine(); $engine->utenti = getElencoUtenti($res); // dati Index.php 9 <select name='utente'> {foreach $utenti as $utente} <option value='{$utente[id]}'>{$utente[nome]}</option> {/foreach} </select> $engine->utenti = getElencoUtenti($res); // dati $engine->display("elenco.tpl"); elenco.tpl <select name='utente'> <option value='5'>Pippo</option> <option value='6'>Pluto</option> </select> Output Asmir Mustafic - PUG 2011 18/07/11
  • 10. Vantaggi Induce alla separazione tra i diversi livelli cocettuali Aiuta ad adottare il pattern MVC ad esempio Meno errori 10 Meno errori Gli errori commessi nei sono isolati dall’resto dell’applicazione e sono più faclimente individuabili Cambiamenti Si può cambiare completamente l’aspetto di un sito senza (qualsi) intervenire sulla sua logica Si può cambiare completamente lo scopo de alcune pagine di un sito senza intervenire sulla sua logica (Elenco news in RSS)senza intervenire sulla sua logica (Elenco news in RSS) Si può cambiare completamente la logica senza intervenire sui template Aiuti/Automatismi Escape automatico, attributi impliciti, macro,…e molto altro! (dipende dall’implementazione del TE) Asmir Mustafic - PUG 2011 18/07/11
  • 11. Svantaggi Altro linguaggio da imparare Si aggiunge un altro livello all’intero sistema 11 Si aggiunge un altro livello all’intero sistema Prestazioni Errori Ma penso che ne valga la pena… Asmir Mustafic - PUG 2011 18/07/11
  • 13. Caratteristiche comuni Variabili $engine = new TemplteEngine(); $engine->utente = "pippo"; Index.php 13 {$utente} $engine->utente = "pippo"; $engine->display("template.tpl"); template.tpl Pippo Output Asmir Mustafic - PUG 2011 18/07/11
  • 14. Caratteristiche comuni Modificatori $engine = new TemplteEngine(); $engine->utente = "PIPPO"; Index.php 14 {$utente |lower|ucfirst} $engine->utente = "PIPPO"; $engine->display("template.tpl"); template.tpl Pippo Output Asmir Mustafic - PUG 2011 18/07/11
  • 15. Caratteristiche comuni Assegnamenti $engine = new TemplteEngine(); $engine->numero = 5; Index.php 15 {set $numero = $numero + 2 } {$numero} $engine->numero = 5; $engine->display("template.tpl"); template.tpl 7 Output Asmir Mustafic - PUG 2011 18/07/11
  • 16. Caratteristiche comuni Condizioni $engine = new TemplteEngine(); $engine->condizione = true; Index.php 16 <div> {if $condizione} OK {/if} </div> $engine->condizione = true; $engine->display("template.tpl"); template.tpl <div> OK </div> Output Asmir Mustafic - PUG 2011 18/07/11
  • 17. Caratteristiche comuni Cicli $engine = new TemplteEngine(); $engine->utenti = getElencoUtenti($res); // dati Index.php 17 <select name='utente'> {foreach $utenti as $utente} <option value='{$utente.id}'>{$utente.nome}</option> {/foreach} </select> $engine->utenti = getElencoUtenti($res); // dati $engine->display("template.tpl"); template.tpl <select name='utente'> <option value='5'>Pippo</option> <option value='6'>Pluto</option> </select> Output Asmir Mustafic - PUG 2011 18/07/11
  • 18. Caratteristiche comuni Inclusioni $engine = new TemplteEngine(); $engine->display("template.tpl"); Index.php 18 $engine->display("template.tpl"); <div> {include "template-mini.tpl"} </div> template.tpl <strong> Sono un altro template template-mini.tpl <div> <strong> Sono un altro template </strong> </div> Output Sono un altro template </strong> Asmir Mustafic - PUG 2011 18/07/11
  • 19. Caratteristiche comuni Ereditarietà <title> {block titolo} template-base.tpl 19 Index.php {extends "template-base.tpl"} {block titolo} Benvenuti alla pagina 5 del sito di pippo {/block} Template-dettagliato.tpl {block titolo} Benvenuti al sito di pippo {/block} </title> $engine = new TemplateEngine(); $engine->display("template-dettagliato.tpl"); Index.php <title> Benvenuti alla pagina 5 del sito di pippo </title> Output Asmir Mustafic - PUG 2011 18/07/11
  • 20. Caratteristiche comuni Auto escape $engine = new TemplteEngine(); $engine->utente = "pip<>po"; Index.php 20 {$utente} $engine->utente = "pip<>po"; $engine->display("template.tpl"); template.tpl pip&lt;&gt;po Output Asmir Mustafic - PUG 2011 18/07/11
  • 21. Caratteristiche comuni I18n $engine = new TemplteEngine(); $engine->setLanguage("en"); Index.php 21 {i18n}Ciao mondo{/i18n} $engine->setLanguage("en"); $engine->setTranslationDir("da/qualche/parte"); $engine->display("template.tpl"); template.tpl Hello world Output Asmir Mustafic - PUG 2011 18/07/11
  • 22. Caratteristiche comuni Plugin Template engine minimali Tutte le funzionalità sono aggiunte tramite plugin 22 Tutte le funzionalità sono aggiunte tramite plugin Anche quelle “quasi” core Un template engine senza plugin è fine a se stesso… Asmir Mustafic - PUG 2011 18/07/11
  • 23. Riepilogo $engine = new TemplteEngine(); $engine->utenti = getElencoUtenti($res); // dati Index.php 23 <select name='utente' {attr-if $condizione class='combo'}> {foreach $utenti as $utente} {if $utente[id] % 2 == 0} <option value='{$utente[id]}'>{$utente[nome]|upper}</option> {/if} {/foreach} $engine->utenti = getElencoUtenti($res); // dati $engine->display("template.tpl"); template.tpl {/foreach} </select> <select name='utente' class='combo'> <option value='2'>PIPPO</option> </select> Output Asmir Mustafic - PUG 2011 18/07/11
  • 24. Alcuni Template Engine PHP (1/2) Smarty il primo ed il più famoso (v2 / v3) 24 il primo ed il più famoso (v2 / v3) Dwoo riscrittura di Smarty in PHP 5 Twig Ispirato a Django, simile a Smarty ma più moderno e potente, integrato in Simfony Tanti, tanti altri, tutti molto simili tra loro…Tanti, tanti altri, tutti molto simili tra loro… Asmir Mustafic - PUG 2011 18/07/11
  • 25. Alcuni Template Engine PHP (2/2) Template scritti in linguaggio XML PHPTAL 25 PHPTAL Istruzioni unicamente con attributi Basato sullo standard di Zope Open Power Template Simile a PHPTAL , forse ancora più “Strict” Sintassi migliorata, sfrutta anche elementi oltre agli attributi ATAL (Vedremo più avanti)ATAL (Vedremo più avanti) Ispirato a PHPTAL ma pensato appositamente per PHP Asmir Mustafic - PUG 2011 18/07/11
  • 26. Quale scegliere? Ogni caso hai il suo template engine! Consiglio 26 Consiglio Se dovete generare documenti basati su XML scegliete un template engine basato su XML (anche HTML4 è “quasi” XML…). Perche ? Lo vedremo più avanti… Anche se sempre, bisogna usare il buon senso…Anche se sempre, bisogna usare il buon senso… Asmir Mustafic - PUG 2011 18/07/11
  • 27. Indirizzi Smarty (http://en.wikipedia.org/wiki/Smarty ) Twig (http://www.twig-project.org/ ) 27 Twig (http://www.twig-project.org/ ) Dwoo (http://dwoo.org/ ) Phptal (http://phptal.org/ ) Open Power Template (http://www.invenzzia.org ) ATal (http://opensource.mercuriosistemi.com/ )ATal (http://opensource.mercuriosistemi.com/ ) Promising TE (http://www.webresourcesdepot.com/19-promising- php-template-engines/ ) 18/07/11Asmir M ustafic - PUG 2011
  • 28. Grazie! 28 Grazie! Ma non è finita… Asmir Mustafic - PUG 2011 18/07/11