PHP 5.3 Attribute Template Language (Template Engine)Asmir Mustafic
Presentazione di ATal, un template engine pensato apposta per php. Ispirato a PHPTAL, ma con una filosofia tutta php. Supporta autoloading, plugin, modificatori, ereditarietà, ecc. Insomma da provare!
Fare con Zend Framework 2 ciò che facevo con ZF1Steve Maraspin
Introduzione a Zend Framework 2 per chi proviene da Zend Framework 1, tenuta allo Zend Framework Day di Milano del 01/02/2013. Introduzione alle nuove caratteristiche e pattern architetturali di ZF2
Zend Framework 2 non è l'evoluzione di ZF, ma un progetto nuovo: il codice è stato riscritto e poche sono le parti in comune con la versione precedente. Lo sviluppatore abituato a ZF1 non ha vita facile, ed è fondato il timore di dover imparare tutto da capo. In questo talk vediamo come cambiare le vecchie abitudini di sviluppatori ZF1, per sfruttare al meglio le potenzialità del nuovo strumento. Attraverso esempi concreti, in cui vedremo all'opera i nuovi pattern e le best practice, mostriamo come - partendo con il piede giusto - il passaggio a ZF2 possa essere meno traumatico del previsto. Il talk è orientato soprattutto a chi già conosce ZF1, ma gli argomenti affrontati possono essere utili anche a chi si avvicina a ZF per la prima volta.
Levate l'ancora! Rotte senza problemi con ZF2Diego Drigani
Introduzione al routing di Zend Framework 2, tenuta allo Zend Framework Day del 01/02/2013 a Milano.
Avere URL pulite e ben strutturate è molto importante, sia da un punto di vista SEO, che di organizzazione delle proprie API. In Zend Framework 2 è il router ad occuparsi di gestire le richieste http, di delegare l'esecuzione delle stesse all'opportuno frammento di codice sorgente, e quindi di estrarne gli eventuali parametri. Questo talk introduce le potenti funzionalità del nuovo sistema di routing di ZF2. Grazie a esempi reali (con gestione di richiestte http, ma anche CLI), sarete in grado di utilizzare il nuovo router di ZF2 in tutta la sua flessibilità.
PHP 5.3 Attribute Template Language (Template Engine)Asmir Mustafic
Presentazione di ATal, un template engine pensato apposta per php. Ispirato a PHPTAL, ma con una filosofia tutta php. Supporta autoloading, plugin, modificatori, ereditarietà, ecc. Insomma da provare!
Fare con Zend Framework 2 ciò che facevo con ZF1Steve Maraspin
Introduzione a Zend Framework 2 per chi proviene da Zend Framework 1, tenuta allo Zend Framework Day di Milano del 01/02/2013. Introduzione alle nuove caratteristiche e pattern architetturali di ZF2
Zend Framework 2 non è l'evoluzione di ZF, ma un progetto nuovo: il codice è stato riscritto e poche sono le parti in comune con la versione precedente. Lo sviluppatore abituato a ZF1 non ha vita facile, ed è fondato il timore di dover imparare tutto da capo. In questo talk vediamo come cambiare le vecchie abitudini di sviluppatori ZF1, per sfruttare al meglio le potenzialità del nuovo strumento. Attraverso esempi concreti, in cui vedremo all'opera i nuovi pattern e le best practice, mostriamo come - partendo con il piede giusto - il passaggio a ZF2 possa essere meno traumatico del previsto. Il talk è orientato soprattutto a chi già conosce ZF1, ma gli argomenti affrontati possono essere utili anche a chi si avvicina a ZF per la prima volta.
Levate l'ancora! Rotte senza problemi con ZF2Diego Drigani
Introduzione al routing di Zend Framework 2, tenuta allo Zend Framework Day del 01/02/2013 a Milano.
Avere URL pulite e ben strutturate è molto importante, sia da un punto di vista SEO, che di organizzazione delle proprie API. In Zend Framework 2 è il router ad occuparsi di gestire le richieste http, di delegare l'esecuzione delle stesse all'opportuno frammento di codice sorgente, e quindi di estrarne gli eventuali parametri. Questo talk introduce le potenti funzionalità del nuovo sistema di routing di ZF2. Grazie a esempi reali (con gestione di richiestte http, ma anche CLI), sarete in grado di utilizzare il nuovo router di ZF2 in tutta la sua flessibilità.
Ecco giunti all'ultima tappa del percorso introduttivo su HTML, PHP e gestione di dati su MySQL:
L'accesso ai dati e la visualizzazione delle informazioni contenute nel database tramite pagine dinamiche scritte in PHP.
Una rassegna sul framework per lo sviluppo in Javascript jQuery ed alcuni suoi plugin sviluppati da Microsoft: Template e Datalink
http://www.pasqualepuzio.it
More developers on DevOps with Docker orchestrationGiulio De Donato
Few things you have to Know in Order to use docker with Orchestration in Production like I did, but not really like i did, because I cried, I really cried hard! Three way devops, pipeline...
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
TWIG: the flexible, fast and secure template language for PHPCesare D'Amico
TWIG is a template engine created by Fabien Potencier, the father of Symfony. In this talk you'll learn why he wrote it, its main features and strengths.
Context oriented architecture - Put the boundary in the right placeLeonardo Proietti
The slides of the talk I gave at PHPDay Italy 2016.
Last year the hype was on SOA, today is on the Microservices Architecture, what about tomorrow? No one knows. Whatever it is the architecture you want to use, we probably agree that the strategic goal of a tech team is to support a company business, creating customer value. How can we model our software and create an architecture to achieve that? What we are trying to do at Lendinvest, is using Domain Driven Design to drive the design of our architecture.
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
Ecco giunti all'ultima tappa del percorso introduttivo su HTML, PHP e gestione di dati su MySQL:
L'accesso ai dati e la visualizzazione delle informazioni contenute nel database tramite pagine dinamiche scritte in PHP.
Una rassegna sul framework per lo sviluppo in Javascript jQuery ed alcuni suoi plugin sviluppati da Microsoft: Template e Datalink
http://www.pasqualepuzio.it
More developers on DevOps with Docker orchestrationGiulio De Donato
Few things you have to Know in Order to use docker with Orchestration in Production like I did, but not really like i did, because I cried, I really cried hard! Three way devops, pipeline...
Deuxième chapitre d'une formation Symfony 2,
l'Objectif de ce chapitre peut se résumer dans les points suivants :
- Présentation du moteur de template Twig
- Syntaxe et utilisation du moteur de template Twig dans les vues des contrôleurs
- Passer des variables depuis les contrôleurs vers les vues
TWIG: the flexible, fast and secure template language for PHPCesare D'Amico
TWIG is a template engine created by Fabien Potencier, the father of Symfony. In this talk you'll learn why he wrote it, its main features and strengths.
Context oriented architecture - Put the boundary in the right placeLeonardo Proietti
The slides of the talk I gave at PHPDay Italy 2016.
Last year the hype was on SOA, today is on the Microservices Architecture, what about tomorrow? No one knows. Whatever it is the architecture you want to use, we probably agree that the strategic goal of a tech team is to support a company business, creating customer value. How can we model our software and create an architecture to achieve that? What we are trying to do at Lendinvest, is using Domain Driven Design to drive the design of our architecture.
Le novità introdotte in TYPO3 CMS 7.3, nuova versione rilasciata il 16 giugno 2015.
A voi i commenti sulle nuove funzionalità introdotte, in attesa del rilascio LTS definitivo, che renderà questo cms ancora più veloce e stabile.
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
Meetup del PHP User Group Milano con presentazione delle attività del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sarà anche un intervento di Enrico Zimuel sulle novità del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
jQuery è un framework javascript che permette di semplificare la scrittura di codice javascript, facilitando l'iterazione con gli elementi della pagina (controlli, stili, eventi, animazioni, ...), e permettendo di aumentare la user experience delle applicazioni, riducendone al tempo stesso la complessità di scrittura. Vista la sua diffusione e potenza, è stato anche incluso nei project templete di Visual Studio. In questa sessione vedremo cos'è jQuery, e scopriremo le potenzialità e funzionalità che offre, verificando se il motto "write less do more" sia vero o meno.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
Topic: Symfony
Language: italian (english version soon)
First of three presentations shown during the first edition of the Train to Symfony
Verona 13/14 April 2013
http://traintosymfony.com
http://twitter.com/TrainToSymfony
Emanuele Gaspari
https://twitter.com/inmarelibero
Come portare il profiler di symfony2 in drupal8Luca Lusso
Molti progetti PHP open source hanno adottato Symfony2 come base per la loro prossima versione, tra questi c'è anche il CMS Drupal (http://drupal.org). In questo talk vedremo come scrivere un modulo per Drupal8 in modo da sfruttare il più possibile il suo nuovo motore Symfony2, dall'integrazione con il service container alla gestione degli eventi, dal routing a Twig. Verrà usato come esempio il modulo webprofiler (http://drupal.org/project/webprofiler) per dimostrare come un bundle per Symfony2 possa essere trasformato in un modulo per Drupal8 e integrato facilmente nel sistema.
Non Conventional Android Programming (Italiano)Davide Cerbo
Android è il nuovo sistema operativo open source per dispositivi mobili e realizzato da Google che si è posta la missione di rendere l’internet mobile accessibile a tutti tramite dispositi a basso costo.
Durante questo intervento mostrerò come sia possibile sviluppare per questo sistema operativo (e non solo) senza l’utilizzo di Java e come sia possibile utilizzare una versione light di Spring Framework nelle applicazioni mobili.
"(My) Best Pratices in Symfony" è una parte delle slides utilizzate durante un Train to Symfony2 organizzato in una web agency nel Giugno 2014.
Non è un elenco di best practices in senso stretto, sono semplicemente spunti dai quali partire per affrontare alcune problematiche pratiche.
Scopri su http://traintosymfony.com cos'è Train to Symfony, e quanto possa essere utile alla tua azienda.
Similar to PHP Template Engine (introduzione) (20)
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
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<>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
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