Newsgroup: it.comp.www.php
Titolo: template engine xml+xslt

Salve a tutti,
ho chiesto tempo fa come poter dividere il codice php dal codice html per 
poter separare il lavoro del grafico da quello del programmatore. La strada 
che piu' mi ha incuriosito e' quella dell'xml+xslt della quale pero' sono 
tutalmente a digiuno o quasi. Dove posso trovare informazioni al riguardo, 
orientate ovviamente allo sviluppatore php e magari qualche piccolo 
programma che fa uso appunto di questa metodologia?
grazie 1000
Dade 


su Google forse...;)? beh dato che siamo su icwp potresti partire da qua 
http://it.php.net/xslt
ciao
Mario
_________________________
WEB: 
www.mario-online.com
________________________________ 

 pero' sono
Se non hai esigenze straordinarie di complessità di elaborazione nei 
template
ti consiglio di usare un approccio che non faccia uso di xsl, per ragioni di 
efficienza.
Template engine come Smarty posseggono una buona efficienza e una curva
di apprendimento ben abbordabile (a differenza di xsl che richiede una 
modalità
di pensiero spesso molto distante da quella del programmatore medio, 
figuriamoci
di chi disegna i templates).
Io personalmente uso un semplicissimo motore di template con segnaposto e 
qualche
minima funzionalità aggiuntiva, riuscendo cmq a separare benissimo il lavoro 
del grafico
da quello del programmatore.
-- 
ff
www.fabiofidanza.com

 ha scritto nel messaggio 
news:eonsft$cid$1...@newsreader.mailgate.org...

Ciao, ti ringrazio del consiglio! A me onestamente smarty non piace per il 
semplice fatto che si deve compilare le pagine prima... per il resto, la 
sintassi la trovo anche abbastaza chiara. Tu che template engine mi 
consigli?
A me piaceva l'idea dell'xsl poiche' io da codice non dovevo far altro che 
tirar fuori i dati e poi il grafico se li "impaginava", ma essendo a digiuno 
di xml (me lo sto studiando ora) e ancora di piu' di xsl mi trovo un po' in 
difficolta', ma mi piace sempre scegliere la soluzione piu' "pulita" o 
"corretta" anche se questa comporta dello studio. Al momento non mi e' molto 
chiaro se devo generare un xml o un xsl... si c'ho molta confusione eheheh, 
per questo ho chiesto a voi del mestiere ;-)
Ciao e grazie
Dade

> Torakiki

 chiaro se devo generare un xml o un xsl...
la soluzione piu' pulita, corretta e furba e' xml + xslt
nonche' quella piu' professionale
solitamente generi l'xml dinamicamente in php e l'associ ad un xsl
statico, la trasformazione la fai fare sempre al php (per mandare al
browser dell'html normale)
xsl e' alquanto facile da imparare e possiede una flessibilita'
incredibile, un template engine non e' nemmeno lontanamente
paragonabile a questa soluzione
per xml non ha nemmeno senso parlare di facilita' talmente e' banale e
scontato capire come funziona
e poi con xml+xslt separi realmente la presentazione dalla logica, con
un template engine no

 nonche' quella piu' professionale
In effetti è qualcosa di molto "potente".
Ma un dubbio che non ho ancora pienamente sviluppato mi sorge in 
merito:
il codice javascript (magari generato "dinamicamente" lato server, 
quindi non qualcosa di "statico") come lo inserisco con questo sistema?
Il problema è che js può essere qualcosa di "ibrido" tra ciò che è 
destinato al "grafico" e ciò che spetta al "programmatore".
Come lo gestisco in questa situazione? In soldoni: come/dove lo metto?
--
rob4you
www.outofmind.eu

 Come lo gestisco in questa situazione? In soldoni: come/dove lo metto?
io le metterei in un cdata in xml che viene posizionato nell'head
dell'xhtml all'interno della trasformazione xsl

 dell'xhtml all'interno della trasformazione xsl
A livello "teorico" sono d'accordo, ma a livello pratico (sarà perché 
non mi sono ancora cimentato con il problema), la vedo più dura.
Prima di dire baggianate :-) toglimi una curiosità: quando elaboro 
l'xml (dinamicamente via php), dò a tutti gli "elementi" un id, 
obbligatoriamente?
--
rob4you

 obbligatoriamente?
quando lo elabori nel senso di quando lo trasformi?
la trasformazione la fai con un xsl statico
cmq credo che tu voglia andare a parare sul fatto di assegnare degli id
ai tag html di modo da potervi accedere via js, giusto?
in questo caso hai varie soluzioni:
- associare l'informazione riguardo l'id direttamente nell'xml, con un
attributo o un sottonodo dell'elemento
- generare gli id secondo uno schema prestabilito via xslt
nel primo caso nel js puoi far riferimento agli id sapendo con quali
saranno (o dovrebbero essere) quelli presenti nell'html finale
nel secondo caso nel js fai riferimento a degli id generici costruiti
secondo certe specifiche che ti diano accesso non all'elemento
specifico, ma al tal nodo del dom (es: id_primo_input_secondo_form)
in entrambi i casi vi e' una limitazione di flessibilita': se vuoi
applicare all'xml una nuova trasformazione non puoi aspettarti che il
js funzioni ancora, soprattutto nel secondo caso, in cui il primo input
del secondo form dell'esempio potrebbe non essere piu' in quella
posizione
ma questo e' un problema generale riguardo all'uso di js: si tratta di
logica applicata alla presentazione (o alla struttura dell'alberto di
presentazione), per cui risulta difficile astrarre completamente l'una
dall'altra.
pero' si puo' fare, generando anche il js dinamicamente (mischiare
cdata con parti di codice js a dati inseriti nella trasformazione).
pero' e' molto complicato e personalmente non ho mai provato a farlo
l'alternativa piu' ovvia e piu' flessibile e' quella di non inserire il
js nell'xml ma nell'xsl: il grafico prepara l'xml statico, lo passa al
programmatore il quale vi aggiunge il js relativo a quella
trasformazione

 ai tag html di modo da potervi accedere via js, giusto?
Yeah, hai centrato perfettamente. :-)
Ti faccio un banalissimo esempio, che mi è venuto in mente, spero che 
sarò chiaro.
Via php genero "dinamicamente" una serie variabile di "blocchi" (non 
meglio precisati, presi ad esempio dalla lettura di un file).
Avrò quindi nell'xml un qualcosa di primitivo e generale tipo 
<block>...</block>
Il grafico decide di trasformare quei "blocchi" generici in "div". 
Applica quindi una comunissima trasformazione xslt.
Fin qui nulla di nuovo.
MA, oltre a questo, il grafico decide di aggiungere a quei blocchi 
(cioè a quei "div"), la proprietà di essere "drag&drop-abili" :-).
Per far ciò, usa una semplicissima funzione fatta apposta di una 
libreria javascript, che deve essere richiamata nel seguente modo:
set_drag_drop("id_primo_elemento","id_secondo_elemento",...);
Bene, il problema è questo:
se trasformare i blocchi xml "block" in "div", è banale attraverso una 
semplice trasformazione xslt (più o meno del tipo <xsl:for-each 
ecc...>), non riesco a capire invece come riuscire, all'interno del 
foglio xsl, a dire di stampare una riga di codice del tipo di quella su 
vista:
set_drag_drop("id_primo_elemento","id_secondo_elemento",...);
E appunto, sottolineo, la proprietà di drag&drop, essendo qualcosa che 
riguarda il client, e non il server, non dovrebbe essere generata 
direttamente nel file xml, visto che dovrebbe essere un'idea del 
grafico, non del programmatore php.
Ecco in sintesi, un esempio del problema che mi è venuto in mente.
Me ne stanno venendo anche altri in mente, non riesco quindi a capire 
se mi sfugge qualcosa o meno. :-)
--
rob4you
ww.outofmind.eu

 grafico, non del programmatore php.
se e' un'idea del grafico non va nell'xml. al grafico va fornita solo
la base dati (l'xml appunto), il resto lo fa lui tramite xsl, al
massimo nell'xml puoi indicare quali sarebbero i blocchi sui cui e'
possibile il drag&drop, ma anche qui un'informazione del genere
significherebbe far dipendere la categorizzazione dei dati dalla loro
visualizzazione, il che e' "metodoligicamente" scoretto


cio' che non capisco io e' come comportarsi nel caso in cui ad un xsl devi 
associare 2 xml... e' ipotizzabile una situazione del genere no? come si 
risolverebbe? 

 la stringa non e' un problema
Posso quindi "costruire" l'id, nel foglio xsl, "statico", in modo 
"pseudo-automatico"?
Ad esempio in modo incrementale (qualcosa tipo: id_1, id_2, ecc.)?
O comunque con criteri da "linguaggio di programmazione"? (scusa il 
pessimo modo di esprimermi, ma credo/spero che tu abbia capito cosa 
intendo dire) :-)
Cosa è _fondamentale_ invece esprimere direttamente nell'xml, e 
lasciare intatto nella trasformazione? I form (in particolare gli id 
dei vari campi)?
--
rob4you

 dei vari campi)?
e' fondamentale dividere la base dati dalla presentazione e dalla
logica di interazione.
non metterai mai un form nell'xml, al massimo definisci un elemento che
verra' trasformato in un input e a cui puoi' associare i dati necessari
alla definizione dell'input stesso

 alla definizione dell'input stesso
Ok, ma, ad esempio, nello script php che riceve i dati da un form 
(generato via xsl), come farei a ottenere i dati?
Voglio dire: se non definisco una "pseudo-form" nell'xml, con tanto di 
metodo che voglio usare (get/post), action, e corredato dai "name" 
("id") dei vari input, come farei nello script di ricezione a 
riprendere i dati ricevuti, se non so come sono organizzati (cioè se 
non so ad esempio che c'è un campo che si chiama $_GET['campo_get1'] 
piuttosto che $_POST['campo_post1'])?
Scusa se le domande sono troppo banali. Ma se mi dici che non c'è 
problema, e che ho solo le idee confuse, mi metto con ancora maggior 
impegno a studiare. :-)
--
rob4you