Newsgroup: it.comp.www.php
Titolo: [templating] - una pagina un pò più complicata

Come ho scritto qualche giorno fa, sto utilizzando queste due funzioni 
per separare codice php da html.
function GetTemplate($template) {
    return str_replace("\"","\\\"",implode("",file($template)));
}
function PrintTemplate($template) {
    echo $template;
}
che vengono richiamate come segue
eval("PrintTemplate(\"".GetTemplate("modules/".$ModName."/templates/blogindex.html")."\");");
Il problema sorge quando voglio realizzare una pagina u n pochetto più 
complessa, ad esempio con due colonne.
Allora ho pensato a due possibili soluzioni:
1) bufferizzare tutta la pagina e poi chiamare un template del tipo:
<html>
	<tr>
		<td>{$colonna1}</td>
		<td>{$colonna2}</td>
	</tr>
</html>
2) creare due files html, ciascuno per colonna e poi richiamarli e 
stamparli sempre col metodo sopra
il problema è:
non riesco a sostituire l'echo della seconda funzione con qualcosa che 
mi stampi il contenuto della variabile $template nel file o che me lo 
bufferizzi.
mi sapreste dare qualche input? qualche pagina del manuale da studiare, 
o qualcosa da cui cominciare?
grazie

 me lo bufferizzi.
http://www.php.net/ob_start
 etc.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

Setec Astronomy ha scritto:
 > Movie Maniac® wrote:
 >
 >
 >>    return str_replace("\"","\\\"",implode("",file($template)));
 >
 >
 >
 > Perche' reinventare la ruota?
 >
 > return addslashes (file_get_contents ($template));
ok, hai ragione :D, mi pare anche decisamente più leggibile come codice.
 >> function PrintTemplate($template) {
 >>    echo $template;
 >> }
 >
 >
 >
 > Perche' non fare direttamente echo? Cosi introduci un overhead inutile.
perchè pensavo di inserire delle condizioni in questa funzione ad un 
certo punto dello sviluppo, condizioni appunto che mi consentissero di 
poter generare pagine con layout più complicato.
 >> Il problema sorge quando voglio realizzare una pagina u n pochetto
 >> più complessa, ad esempio con due colonne.
 >
 >
 >
 > Perche' non usi uno delle decine di template engine gia' esistenti?
due motivi:
1) volendo imparare, non volevo adagiarmi con pappe pronte, non mi 
giudicare presuntuoso per favore però :D
2) dovendo poi ridistribuire il modulo (è uno script per un portale) mi 
scoccia doverlo redistribuire con smarty o chessoio
 >> non riesco a sostituire l'echo della seconda funzione con qualcosa
 >> che mi stampi il contenuto della variabile $template nel file o che
 >> me lo bufferizzi.
 >
 >
 > 
http://www.php.net/ob_start
 etc.
ecchilallà :D, ora me la studio
grazie mille

 
http://www.php.net/ob_start
 etc.
Ho fatto in questa maniera, puoi dirmi se sto facendo cazzate o 
commettendo errori di gioventù?
function BuildTemplate($cachefile) {
   global $ModName, $UserName;
   $cachefile = md5($UserName."_".$cachefile.".html");
   $handle = fopen("modules/".$ModName."/cache/".$cachefile, "a+b");
   fwrite($handle, ob_get_contents());
   fclose($handle);
}
function DestroyTemplate($cachefile){
   global $ModName, $UserName;
   $cachefile = md5($UserName."_".$cachefile.".html");
   echo file_get_contents ("modules/".$ModName."/cache/".$cachefile);
   unlink("modules/".$ModName."/cache/".$cachefile);
}
ob_start();	// Inizio buffering
while (!$res->EOF) {
eval("PrintTemplate(\"".GetTemplate("modules/".$ModName."/templates/blogindex.html")."\");");
}
BuildTemplate("user_index"); // scrivo il template
ob_end_clean();	// Pulisco il buffer
DestroyTemplate("user_index");	// Stampo e distruggo la cache
un'ultima doma nda se posso. E' possibile, dall'interno di una funzione, 
risalire al nome della funzione che l'ha chiamata? (spero di essere 
stato chiaro)
Ciao e grazie come sempre

 funzione che l'ha chiamata? 
http://www.php.net/debug_backtrace
Oppure usi semplicemente un parametro aggiuntivo.
-- 
I am what I am, I do what I can


 Oppure usi semplicemente un parametro aggiuntivo.
grazie

 E' più corretto ridefinire la variabile all'interno di ogni funzione?
No.
Passa i valori che ti servono nella funzione come parametri
