Hello,
ich will den Fehler eben noch beseitigen...
Man sieht ihn ja nicht auf den ersten Blick:
Ein passives Template für PHP könnte z.B. so aussehen:
#--- templatedatei.html ---
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title><!--{TITLE}--></title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
<!--{CSS-general}-->
</style>
</head>
<body>
<!--{BODY-head}-->
<!--{BODY-content}-->
<!--{BODY-bottom}-->
</body>
</html>#--------------------------
Die Daten, die vom Programm zusammengestellt wurden, können nun durch ein einfaches str_replace() dort eingestanzt werden, ohne die Programmkontrolle an das Template zu übergeben.
<?php ### template-engine.php ###
$html = file_get_contents('templatedatei.html');
$_output = array();
$_output['<!--{TITLE}-->'] = 'mein erstes passives Template';
# ...
$_output['<!--{BODY-content}-->] = '<p>hier kommt dann der Content</p>';
# ---[1]--- die beiden folgenden Zeilen zum Testen mal auskommentieren
$_output['<'.'?php'] = '<!-- php: '; ## PHP-Starttags beseitigen
$_output['?'.'>'] = ' -->'; ## PHP-Endtags beseitigen
$html = str_replace(array_keys($_output),$_output,$html);
echo $html;?>
#---------------------------
[1] Die Tag-Erstzugnen für PHP-Tags usw. müssen immer als letzte Elemente ins Replace-Array eingetragen werden. Dann kann man bedenkenlos auch andere Subtemplates einstanzen, die ihrerseits eventuell wieder unerlaubte PHP-Tags enthalten.
Das ist mit str_replace() hier natürlich ur ein einfaches Beispiel.
Wenn man es ausbauen will, wird man wohl eher preg_replace() benutzen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg