Stefan: Templates und if etc.

Beitrag lesen

Hi Samy,

ich habe auch mal ein Template-System codiert und dabei die Templates als normal "PHP in HTML"-Dateien erfasst. Sprich: Du kannst beliebigen PHP Code ausführen, was nicht geht ist, dass Du auf bestehende Variablen zurückgreifst. Falls Du das benötigst kann ich Dir mit meiner Lösung nicht weiterhelfen, ansonsten leß weiter (Hinweis: Man kann auch vorher schon alle Berechnungen durchführen und gewisse Stellen in Variablen speichern die man einfach so in die Templates einfügen kann, sprich einfach: $varname)

Falls Du Interesse daran hast, hier ein paar Codezeilen:

FUNKTIONEN:

/**
 * @return string
 * @param string string
 * @desc Diese Funktionen evalieren die PHP BEREICHE in einer HTML Datei.
 * Die Funktionen unterscheiden sich lediglich durch die verwendete PHP Version
 * Es wird nur die entsprechend gültige Version geladen!
 */
if($phpversion >= 405) {
 function eval_buffer($string) {
  ob_start();
  eval(stripslashes("$string[2];"));
  $ret = ob_get_contents();
  ob_end_clean();
  return $ret;
 }
} else {
 function eval_buffer($string) {
  ob_start();
  eval(stripslashes("$string;"));
  $ret = ob_get_contents();
  ob_end_clean();
  return $ret;
 }
}

/**
 * @return string
 * @param string file
 * @desc Diese Funktionen liest eine Datei ein und fuehrt den
 * darin enthaltenen. PHP Code aus.
 * Anschliessend wird der Dateiinhalt zurueckgegeben.
 */
function load_phpfile($file="") {
 global $phpversion;

//PRUEFEN, OB DATEI EXISTIERT
 if(empty($file) || !file_exists($file)) {
  return false;
 }
 else {
  //DATEI AUSLESEN
  $content = implode("", file($file));
  $content = str_replace(""", "\"", $content);

//PHP BEREICH IN DATEI AUSFUEHREN (ABHAENGIG VON PHP VERSION)
  if($phpversion >= 405) {
   $content = preg_replace_callback("/(<?php|<?)(.*?)?>/si", "eval_buffer", $content);
  } else {
   $content = preg_replace("/(<?php|<?)(.*?)?>/sie", "eval_buffer('\2')", $content);
  }

//RUECKGABE DES DATEIINHALTS
  return $content;
 }
}

Wenn Du diese Funktionen als Basis nimmst kannst Du Deine Templates so aufbauen:

<html>
<head>
<title>$title</title>
</head>
<body>

<?php
if(date("Y") % 4)==0) {
 echo "Schaltjahr";
} else {
 echo "Kein Schaltjahr";
}
?>

$sonstiger_content

</body>
</html>

Und diese Templates kannst du dann im Hauptscript über:

eval("echo "".load_phpfile("/pfad/zur/datei.htm")."";");

ausgeben lassen.

Ich halte dieses Lösung für recht sinnvoll, aber ich berechne auch alle Teilelemente vorher und mach kaum was mit PHP in den Templates, höchstens ein paar Datumsfunktionen oder so...

Naja, such Dir raus was Du brauchst,

Gruss Stefan