php template engine (introduzione)

28
TEMPLATE ENGINES (In ambiente PHP…) Asmir Mustafic

Upload: asmir-mustafic

Post on 21-May-2015

1.198 views

Category:

Technology


8 download

DESCRIPTION

Introduzione ai template engine per PHP

TRANSCRIPT

Page 1: PHP Template Engine (introduzione)

TEMPLATE ENGINES(In ambiente PHP…)

Asmir Mustafic

Page 2: PHP Template Engine (introduzione)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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

Page 21: PHP Template Engine (introduzione)

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)

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)

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)

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)

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)

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)

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)

Grazie!

28

Grazie!

Ma non è finita…

Asmir Mustafic - PUG 2011 18/07/11