php template web engine... come funzionano?

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

nuitari ha scritto:Stiamo scherzando? E' pazzesco pensare di non usre i template engine, per N motivi. IMHO i principali sono 2.

Il primo è che in un ambiente lavorativo normale il programmatore php non è anche il responsabile della creazione dell'html, per quello c'è un designer specializzato, che ne capisce bene di uno e non dell'altro. Mischiando i due tipi di codice diventa veramente complicato manterli entrambi, ma MOLTO complicato, quasi una sfida acrobatica. Inoltre, si corre il serio risco di compromettere un tipo di codice modificando l'altro. Pensa ad esempio cosa potrebbe succedere se il designer, usando dreamweaver o simili, eliminasse un intera porzione di codice html perchè non più necessario, eliminando al contempo tutto l'eventuale codice php ivi contenuto... impensabile.
Con un template il codice HTML sta nel file .html, il codice PHP nel file .php e questo rischio non esiste.

Il secondo è che non usando template engine, il codice diventa dipendente dal layout.
Ad esempio, supponi di dover visualizzare una tabella con una serie di totali ed un page navigator per la suddivisione dei contenuti in pagine (il che in genere è auspicabile).
A seconda di dove lo vuoi visualizzare, se in alto, in basso etc devi fisicamente spostare il tuo codice od addirittura esser costretto a scrivere le cose più volte, o sei semplicemente costretto a super parametrizzare il tutto o a salvarti milioni di variabili temporanee.. O peggio, se il layout cambia (una cosa che era in alto finisce in basso o viceversa), puoi esser costretto a dover riscrivere pezzi di codice, non solo spostarli... terribile, semplicemente.
Con un template ti risolvi il problema, in quanto la visualizzazione è gestita in un file separato ed indipendente e l'effettiva collocazione degli elementi (o la loro ripetizione) non riguardano minimamente il flusso del codice, il quale rimane invariato.

Per farti capire come si usa un template, facciamo un esempio, usando un engine di template e nomi di file ipotetici.
Supponiamo di voler visualizzare la data corrente in una pagina html. Senza usare i template, dovresti creare un file che potremmo chiamare "pagina.php" e metterci dentro il seguente codice:

Codice: Seleziona tutto

La data corrente è: <?php date("d/m/Y"); ?>
Con i template, dovresti innanzitutto creare un file (il template) che potremmo chiamare "pagina.html" in questo modo:

Codice: Seleziona tutto

La data corrente è: {data_corrente}
Quindi un file php (che poi è quello che chiamerai per visualizzare la pagina) che potremmo chiamare "pagina.php" con il seguente codice:

Codice: Seleziona tutto

<?php
include("template_engine.php");
$tpl = new template("pagina.html");
$tpl->set_var("data_corrente", date("d/m/Y");
$tpl->parse();
?>
Nel file, come puoi vedere, innanzitutto includi l'engine di template. Quindi istanzi un oggetto di tipo template facendogli caricare il file .html, valorizzi al suo interno la variabile {data_corrente} e ne visualizzi l'output.

Il tutto è ovviamente più lungo da scrivere ma decisamente più pulito ed organizzato, e nulla di quello che può accadere all'HTML comprometterà mai il codice PHP.

L'unico vero difetto dei template, comunque, è l'utilizzo della memoria. Ogni template ne consuma un certo quantitativo, ed avendo php (come è ragionevole che sia) un limite fisico alla dimensione di memoria che ogni interrogazione può occupare, ne consegue che c'è un limite fisico alla dimensione massima delle pagine che puoi creare con i template (dipendente dalle impostazioni di PHP sul sever).
grazie... ho un po' più chiare diverse cose...

arriviamo all'aspetto pratico... che non facilmente sono riuscito a trovare in rete.

Premetto che per molti la domanda può risultare sciocca... ma la faccio lo stesso!
Come realizzo il template?
Aggiungo inoltre che uso Kompozer...
Supponiamo che voglia realizzare una pagina semplice: banner in alto e 4 pulsanti sulla sinistra, poi con php a seconda di quello che clicco apparirà una cosa diversa nel centro della pagina.

Quello che non riesco a capire è come partire...

scusate ancora per le domande banali...

Avatar utente
francogdn
Linux 2.x
Linux 2.x
Messaggi: 320
Iscritto il: ven 19 mag 2006, 10:52
Distribuzione: Fedora
Località: Torino

Messaggio da francogdn »

Quoto al 200% ciò che ha scritto nuitari.

Tornando a come iniziare con Smarty, caro smtux, ti consiglio di iniziare dalle cose semplici. Hai già seguito il crash course? Sicuramente ti chiarirà le idee.
Ti posto di nuovo il link: http://smarty.php.net/crashcourse.php

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

francogdn ha scritto:Quoto al 200% ciò che ha scritto nuitari.

Tornando a come iniziare con Smarty, caro smtux, ti consiglio di iniziare dalle cose semplici. Hai già seguito il crash course? Sicuramente ti chiarirà le idee.
Ti posto di nuovo il link: http://smarty.php.net/crashcourse.php
lo sto seguendo prorprio ora... ma mi è venuto il dubbio su come organizzare il template...
infatti supponendo di voler fare quella cosa semplice che dicevo sopra... mi manca il come organizzare la pagina...
era questa la domanda banale... devo fare una tabella a centro pagina dove racchiudo le variabili valorizzate da smarty?

Avatar utente
francogdn
Linux 2.x
Linux 2.x
Messaggi: 320
Iscritto il: ven 19 mag 2006, 10:52
Distribuzione: Fedora
Località: Torino

Messaggio da francogdn »

Facciamo finta che tu abbia un recordset che ti viene restituito da una chiamata MySQL: devi passare l'array o l'oggetto al template e poi ciclarlo utilizzando section, come descritto qui:
http://smarty.php.net/manual/en/languag ... ection.php

In particolare guarda: Example 7-36.

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

scusa, che differenza fa nel tuo discorso scrivere:

Codice: Seleziona tutto

<?php
$data_corrente =  date("d/m/Y");
include 'pagina_html.php'
?>
e in 'pagina_html.php' scrivere

Codice: Seleziona tutto

<?php echo $data_corrente; ?>
a parte che ti risparmi un layer di complessità ?

ribadisco: scrivere codice MVC non centra niente con usare template engines, ho già citato lo "Zend Framework", se ancora non mi credete andate a vedervi "Ruby on Rails".


Detto questo per creare quello che hai mente probabilmente devi spostare l'attenzione dal server al client (ossia il browser) usando un po' di javascript.

comincia con il crearti la tua pagina html statica, all'inizio nella parte centrale metti solo una delle parti che vuoi far vedere con i bottoni.

Quando sei contento del risultato hai tre strade :

- lato server: togli dal tuo file html la parte centrale e sostituiscila con una variabile php (o smarty se proprio ci tieni), questa variabile sarà il risultato del parsing di un'altro file/template che a seconda del bottone cliccato il tuo codice php si preoccuperà di impostare.

-lato client: fai la pagina html statica con i le varie parti tutte presenti, solo che quelle che non si devono vedere le metti in div nascosti, poi con un semplice javascript lanciato dalla pressione dei bottoni visualizzi quello che ti interessa.

- misto: fai una pagina con slo i tre bottoni e la parte centrale con un div vuoto, premento i bottoni parte una richiesta javascript che restituisce solo il frammento di html che ti interessa.

Avatar utente
francogdn
Linux 2.x
Linux 2.x
Messaggi: 320
Iscritto il: ven 19 mag 2006, 10:52
Distribuzione: Fedora
Località: Torino

Messaggio da francogdn »

puzuma ha scritto: Detto questo per creare quello che hai mente probabilmente devi spostare l'attenzione dal server al client (ossia il browser) usando un po' di javascript.

comincia con il crearti la tua pagina html statica, all'inizio nella parte centrale metti solo una delle parti che vuoi far vedere con i bottoni.

Quando sei contento del risultato hai tre strade :

- lato server: togli dal tuo file html la parte centrale e sostituiscila con una variabile php (o smarty se proprio ci tieni), questa variabile sarà il risultato del parsing di un'altro file/template che a seconda del bottone cliccato il tuo codice php si preoccuperà di impostare.

-lato client: fai la pagina html statica con i le varie parti tutte presenti, solo che quelle che non si devono vedere le metti in div nascosti, poi con un semplice javascript lanciato dalla pressione dei bottoni visualizzi quello che ti interessa.

- misto: fai una pagina con slo i tre bottoni e la parte centrale con un div vuoto, premento i bottoni parte una richiesta javascript che restituisce solo il frammento di html che ti interessa.
Auguri!

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

francogdn ha scritto: Auguri!
commento molto costruttivo

Avatar utente
francogdn
Linux 2.x
Linux 2.x
Messaggi: 320
Iscritto il: ven 19 mag 2006, 10:52
Distribuzione: Fedora
Località: Torino

Messaggio da francogdn »

puzuma ha scritto:
francogdn ha scritto: Auguri!
commento molto costruttivo
Qui si sta cercando di aiutare una persona che ha chiesto come utilizzare smarty, quindi ogni ulteriore discussione sul fatto che siano giusti/sbagliati utili/inutili non mi sembra costruttiva. Al massimo apri un altro thread.

smtux
Linux 3.x
Linux 3.x
Messaggi: 977
Iscritto il: gio 1 set 2005, 0:00
Slackware: 12.0
Località: somewhere in the time

Messaggio da smtux »

concordo... cerchiamo di non litigare altrimenti non si va da nessuna parte e soprattutto io non ne cavo le gambe ;)

ho trovato questo:
http://arimi.altervista.org/templateTut/tutorial.htm

tanto per partire a costruire il template... che dite?

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

smtux ha scritto:concordo... cerchiamo di non litigare altrimenti non si va da nessuna parte e soprattutto io non ne cavo le gambe ;)

ho trovato questo:
http://arimi.altervista.org/templateTut/tutorial.htm

tanto per partire a costruire il template... che dite?
ok, va bene sono andato off-topic. Però ragazzo mio stai faccendo un po' di confusione sul termine template: come lo intendi tu è lo scheletro html che ad esempio mettono a disposizione i cms, questo scheletro può essere scritto in mille modi, uno di questi è usando un template engine.

Però nella fase iniziale di ideazione grafica forse è prematuro già buttarsi sull'uso di un template engine.

Scusate il flame, è solo che da quando ho smesso di usare smarty mi sento un uomo nuovo, questione di preferenze personali.

Avatar utente
francogdn
Linux 2.x
Linux 2.x
Messaggi: 320
Iscritto il: ven 19 mag 2006, 10:52
Distribuzione: Fedora
Località: Torino

Messaggio da francogdn »

L'ho letto abbastanza rapidamente e mi sembra un buon tutorial.

Considera che un template non è altro che codice html, quindi puoi disegnartelo (o fartelo disegnare) come meglio credi.

Avatar utente
nuitari
Linux 3.x
Linux 3.x
Messaggi: 777
Iscritto il: dom 14 ott 2007, 12:51
Slackware: 12.0
Località: San Colombano al Lambro
Contatta:

Messaggio da nuitari »

uhm capisco che sia utilizzato e tutto, quindi ciò che dico ricade nel magico reame del "secondo me", ma smarty mi sembra troppo uno pseudo-codice php per piacermi.. in fondo è un po' come scrivere codice php, anche se con un formato diverso, non cambia molto dal discorso che il template contiene del "codice" (ossia statements scritti con una sintassi precisa che va conosciuta ed interpretata). So che non è esattamente così, ma ci si avvicina.

Personalmente devo dire di prediligere template più "inerti" (ossia responsabili solo della valorizzazione di variabili e sezioni) accoppiati poi a fogli di stile xslt, che più o meno permettono di fare tutti i *ragionementi* che fa smarty ma seguendo uno standard che è + vicino alle competenze di un designer.

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

nuitari ha scritto:uhm capisco che sia utilizzato e tutto, quindi ciò che dico ricade nel magico reame del "secondo me", ma smarty mi sembra troppo uno pseudo-codice php per piacermi.
il problema è che php è nato proprio come un template engine, inizialmente (quando ancora era "hypertext preprocessor") faceva veramente poche cose, ad esempio gli if e i for sono arrivati solo in secondo tempo.

La qualifica di "linguaggio di programmazione" è arrivata dopo un po' quando è entrata in scena zend. Questo spiega anche il motivo di certe costruzioni assurde che pian painino stanno cercando di superare, anche se per arrivare alla pulizia di altri linguaggi ce ne vuole.

Non si sa bene perchè appena php ha iniziato ad essere qualcosa in più di un motore di template hanno cominciato a nascere queste alternative che finiscono sempre per ripercorrere la strada di php: iniziano sostituendo dei placeholder, poi ci aggiungono i loop e le condizioni e ti ritrovi di nuovo il codice html pieno di "sporcizia". La cosa è abbastanza assurda in quanto niente impedisce di usare php come "alle origini", oltrettutto php è molte volte più veloce di qualsiasi altro motore.

L'approccio di nuitari è sicuramente valido ma implica avere programmatori e grafici "in gamba", che è "una buona cosa" ma non lo consiglierei come primo approccio a uno che inizia.

Avatar utente
nuitari
Linux 3.x
Linux 3.x
Messaggi: 777
Iscritto il: dom 14 ott 2007, 12:51
Slackware: 12.0
Località: San Colombano al Lambro
Contatta:

Messaggio da nuitari »

Vedo che siamo d'accordo con la sporcizia del codice :) Sicuramente usare template e xslt è sbagliato, fuor da ogni dubbio, per uno che comincia (c'è da spararsi), ma IMHO cominciare con un semplice engine di template e basta non è ne difficile ne, a conti fatti, sporca il codice in alcun modo (e son sicuro che su questo concordi, se ho ben capito quel che hai detto).

Il motivo per cui smarty non mi piace è che, a conti fatti, nemmeno io vedo un motivo per usare qualcosa di diverso dallo stesso linguaggio PHP per fare cicli et similar nel codice. Ma un engine di template pulito che permetta solo di parametrizzarne il contenuto (al posto dei tag <? ?> etc) è secondo me preferibile.

Spezzo una lancia a favore di smarty: si può guardare a smarty un po' come ad una collezione di funzioni o classi. Quando si programma in php, ovviamente si scrivono cose come classi e funzioni, si tenta di non riutilizzare il codice e reinventare l'acqua calda ogni volta. Smarty in teoria si propone di fornire un linguaggio *orientato al design* per gestire le cose relative al design. Secondo me semplicemente fallisce in questo scopo, finendo per fare cose che non gli competono in un modo del tutto errato stilistcamente parlando.

Avatar utente
puzuma
Linux 2.x
Linux 2.x
Messaggi: 482
Iscritto il: mar 4 lug 2006, 17:14
Nome Cognome: Stefano Salvador
Slackware: current
Kernel: 2.6.32.2
Desktop: KDE 4.4.0
Località: Udine
Contatta:

Messaggio da puzuma »

nuitari ha scritto:Vedo che siamo d'accordo con la sporcizia del codice :) Sicuramente usare template e xslt è sbagliato, fuor da ogni dubbio, per uno che comincia (c'è da spararsi), ma IMHO cominciare con un semplice engine di template e basta non è ne difficile ne, a conti fatti, sporca il codice in alcun modo (e son sicuro che su questo concordi, se ho ben capito quel che hai detto).
sicuramante usare un motore di template "semplice" impedisce di inserire logiche complesse nel codice html e questo va benissimo e insegna una cosa importante a chi comincia, poi con l'esperienza ognuno sceglie quello che tecnicamente gli sembra migliore.

il mio astio per smarty è dovuto al fatto che ormai è un motore di template talmente complesso che non è altro che un surrogato di php con una sintassi meno bella. Nei post precedenti ne veniva elogiata la sua potenza, quello che intendevo io è che se vuoi un motore di template potente tanto vale usare php direttamente.

Rispondi