Newsgroup: it.comp.www.php
Titolo: templates, preg_replace e codice php nel sostituto

Stavo lavoricchiando su un template..
<?PHP
$sost['title'] = "Questo è il titolo";
$sost['testo'] = "e questo è il testo";
$html = implode("",file("template.htm"));
$html = preg_replace("/\{(.*)\}/Ue","\$sost['\$1']",$html);
echo $html;
?>
Il problema è che se noi abbiamo un template del tipo ...
<html>
<head>
 <title>{title}</title>
</head>
<body>
{testo}
{testo2}
</body>
</html>
avremo un notice dovuto al fatto che testo2 è un index non definito.. (c'è
nel template {testo2} ma non c'è -volutamente- nello script un
$sost['testo2']).
Tra l'altro anche su 
http://php.dopoil.com/tutor.php?template1
 compare
questo problema  - ebbene sì.. non l'avrei mai detto ma è sfuggito anche a
Jurgen :) -.
La cosa volendo si risolve brutalmente con un @ davanti a preg_replace ma mi
chiedevo se era possibile inserire il codice php necessario alla verifica
del settaggio direttamente nel preg_replace... if (isset(blablabla))...
insomma una cosa un po' più fine della @
Ho fatto un paio di tentativi ma oggi non è giornata e finisce sempre che mi
incasino..

 ?>
Anchio sto cercando la soluzione
l'unica soluzione sta in eval ...
http://www.php.net/manual/en/function.eval.php
mischia un po' questo codice e dovresti passare variabili
attraverso i template.....
$schermo=/// il famoso file con dentro codice php e $variabili....
$missprimo=addslashes($schermo);
//////ob_start();
///$missprimo=ob_get_contents(eval('? >' . $missprimo));
/////eval("\$missprimo = \"$missprimo\";");
/////$contents =ob_get_contents();
$missprimo=stripslashes($missprimo);
///$quantohai=ob_get_length();
////$missprimo=ob_end_clean();
////echo "<br><br><br><br><br><br><br><br> $quantohai";
//////exit;
///ob_end_flush();
$string=ob_get_contents(eval('? >' . $string));
ciao Patrik


 Stavo lavoricchiando su un template..
Ecco in questo modo puoi pure mettere codice NORMALE_PHP nelle template
------------------------------------------------------------------
html code <? print_item_shop("378"); ?> oppure
<? print_item_shop_tabs("0","100"); ?>  100 articoli ...html code
function eval_buffer($string) {
ob_start();
eval("$string[2];");
$ret = ob_get_contents();
ob_end_clean();
return $ret;
}
function eval_html($string) {
return
preg_replace_callback("/(<\?php|<\?)(.*?)\?>/si","eval_buffer",$string);
}
$string = implode ('', @file('templateconcodicephpnormale.php'));
$cms=eval_html($string);
$tpl->assign( array(
      TITOLO  => "Shoppi",
      CONTENUTOFILEPHP => $cms,
      TIRADESCDAARTICOLO => "Descrizione",
      INCODA     => "Amministartor"
   ) );
Troppo forte eval :-) quando il cliente ha finito di fare la spesa
gli mandi un mail html con dentro tutto il catalogo && i link per comprare
compresa la sua sessione ...
Patrik 
www.swisse.ch
 
www.swisse.org

 Tra l'altro anche su 
http://php.dopoil.com/tutor.php?template1
 compare
quelle template sono una porcheria!
queste sono professionali....
http://host.maggia.net/asp/class.fasttemplate.phps
rc Patrik


 del settaggio direttamente nel preg_replace... if (isset(blablabla))...
usa una function per sostituire e ora puoi ampliare il tuo 'template system'
a piacere
function subst($sost,$param)
{
  if (isset($sost[$param]))
    return $sost[$param];
  else
    return "{".$param."}";
}
$html=preg_replace("/\{(.*)\}/Ue", "subst(\$sost,'\$1')",$html);

 quelle template sono una porcheria!
Vuoi paragonare un tutorial con un sistema professionale?
Definirlo come porcheria lo trovo completamente fuori.
BTW, e' una porcheria come quoti.

 $html=preg_replace("/\{(.*)\}/Ue", "subst(\$sost,'\$1')",$html);
Ecco.. perfetto.. ci avevo provato a fare la funzioncina che faceva la
verifica ma finivo sempre per incasinarmi con la sintassi.
Grazie.