Labrinto ermetico - Introduzione · 2008. 4. 1. · Labrinto ermetico - Introduzione
PHP Template Engine (introduzione)
-
Upload
asmir-mustafic -
Category
Technology
-
view
1.198 -
download
8
description
Transcript of PHP Template Engine (introduzione)
![Page 1: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/1.jpg)
TEMPLATE ENGINES(In ambiente PHP…)
Asmir Mustafic
![Page 2: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/2.jpg)
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
![Page 3: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/3.jpg)
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
![Page 4: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/4.jpg)
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
![Page 5: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/5.jpg)
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
![Page 6: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/6.jpg)
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
![Page 7: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/7.jpg)
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 client� Lato client� Elaborazione con browser (quasi sempre in javascript)
XSLT? Lato server e client, ma verboso…
Asmir Mustafic - PUG 2011 18/07/11
![Page 8: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/8.jpg)
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 engineFonde 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
![Page 9: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/9.jpg)
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
![Page 10: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/10.jpg)
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
![Page 11: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/11.jpg)
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
![Page 12: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/12.jpg)
Caratteristiche comuni
� Variabili
� Assegnamenti
12
� Assegnamenti
� Condizioni
� Cicli
� Inclusioni
� Eriditarietà
� Auto escape� Auto escape
� I18n
� Plugin
Asmir Mustafic - PUG 2011 18/07/11
![Page 13: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/13.jpg)
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
![Page 14: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/14.jpg)
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
![Page 15: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/15.jpg)
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
![Page 16: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/16.jpg)
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
![Page 17: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/17.jpg)
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
![Page 18: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/18.jpg)
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
![Page 19: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/19.jpg)
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
![Page 20: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/20.jpg)
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<>po
Output
Asmir Mustafic - PUG 2011 18/07/11
![Page 21: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/21.jpg)
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
![Page 22: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/22.jpg)
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
![Page 23: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/23.jpg)
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
![Page 24: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/24.jpg)
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
![Page 25: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/25.jpg)
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
![Page 26: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/26.jpg)
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
![Page 27: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/27.jpg)
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
![Page 28: PHP Template Engine (introduzione)](https://reader033.fdocuments.in/reader033/viewer/2022052900/555d6450d8b42a9d3b8b5b09/html5/thumbnails/28.jpg)
Grazie!
28
Grazie!
Ma non è finita…
Asmir Mustafic - PUG 2011 18/07/11