Newsgroup: it.comp.www.php
Titolo: uso di Smarty o altri template

Da qualche tempo uso Smarty, ma qualisiasi template pone la stessa
problematica.
Le direttive dicono: separate l'aspetto grafico dalla programmazione pura,
il primo lo fate con Smarty, la seconda con PHP. Mi chiedo allora, in una
situazione come quella descritta sotto, voi come vi comportate.
Immaginiamo una semplice scheda informativa. Questa scheda, che contiene per
esempio i dati dell'utente iscritto a qualcosa, può essere rappresentata in
due modalità: la prima mostra semplicemente i valori dei vari campi, la
seconda consente la modifica di tali valori tramite form. Tali modalità sono
selezionabili tramite il valore della variabile $_GET['edit'] che può essere
TRUE o FALSE.
Mi chiedo se conviene eseguire la selezione della modalità corrente nel
documento in PHP e passare al template semplicemente ciò che deve mostrare
(quindi il testo nel primo caso, il form nel secondo), oppure se conviene
passare il valore di $edit al template e far si che sia questo a decidere
cosa mostrare.
Seguendo le regole dovrei propendere per la seconda, peraltro più semplice
da implementare. Ma la volontà di rendere i template i più semplici
possibile, eliminando tutto ciò che è programmazione, mi fa scegliere la
prima, anche nell'ottica di voler predisporre più template per la stessa
pagina.
Spero di essere stato sufficientemente chiaro.
Cosa fareste voi?
Un saluto,
Luca

 cosa mostrare.
Sicuramente la prima soluzione.
Il template è grafica. Niente di più.
Se usi i template per separare grafica e codice, e poi ci metti dentro del
codice, che separazione fai?
Io farei 2 template, uno con il form e uno senza, poi fai fare TUTTO allo
script.
Ciao
Marco


e fare cosi ?
script php:
<?
// Immaginando che $result['nome'] contenga il nome dell'utente
// e che la variabile $edit decida la modalità di visualizzazione (form o
solo vista)
...
if ($edit)
    $smarty-> assign("nome", "<input type=\"text\"
value=\"".$result['nome']."\">");
else
    $smarty-> assign("nome", $result['nome']);
$smarty->display('file_template.tpl');
?>
template:
...
Nome: {$nome}
...
In questa maniera eviterei la necessità di creare due template.
Cosa ne pensi?
Ciao,
Luca

 In questa maniera eviterei la necessità di creare due template.
Io uso il tuo stesso metodo proprio per evitare di fare due template e 
due modifiche ogni volta che ne devo cambiare uno
ciao
Mauro

> e fare cosi ?
Non ho mai usato Smarty, ma mi sembra che possa funzionare.
Ciao
Marco


Beh diciamo che Smarty è solo un esempio. Il concetto si applica a ogni
parser.
Luca

 In questa maniera eviterei la necessità di creare due template.
Perfetto! Ed elimini _ANCHE_ la necessità di usare smarty :-D
Tieni presente che i template engine servono per separare la logica di
controllo dalla presentazione del risultato, dove quest'ultima corrisponde
in un certo qual modo ad un caso d'uso (usecase).
E in questo caso tu avresti due "USI": 
1) Visualizza dati
2) Modifica dati
E quindi due tpl.
Se hai paura di perdere sincronizzazione tra le due modalità, c'e' qualcosa
che non va nella progettazione della pagina.
IMHO conviene procedere cosi':
//- userpage.php
$smarty-> assign("nome", $result['nome']);
if ($edit){
	$smarty->display('file_edit_template.tpl');
} else {
	$smarty->display('file_template.tpl');
}
//- file_edit_template.tpl
...
Nome: <input type=text name="nome" value="{$nome}">
...
//- file_edit_template.tpl
...
Nome: {$nome}
...


La questione non è perdere la sincronizzazione, ma semplificare al massimo
la possibilità di effettuare modifiche nel futuro. La soluzione da te
descritta è valida se i casi sono due: Modifica e Visualizzazione. Nel mio
caso però la situazione è più complessa: alcune parti possono essere editate
solo sotto certe condizioni e solo da determinati utenti, ecc. Ovviamente
non ho descritto la situazione specifica per evitare papiri inutili, ma
effettimente non si tratta neanche di una scheda utente :-D. Ritengo che la
soluzione di passare al tpl ciò che deve visualizzare, ovvero il valore del
campo se in modalità Visualizzazione o la input se in modalità Modifica,
possa essere più valida nelle situazioni complesse.
Ti ringrazio comunque per l'utile intervento.
Ciao,
Luca