Hi Romy!
danke erstmal für den Tip mit Smarty, ich schau gleich mal rein.
Ich bitte darum ;-)
Es lohnt sich!
nehmen wir mal an, ich habe eine main.pph, welche eine Tabelle enthält und jede Zelle eigentlich eine content-Datei läd (bzw. Navi usw. )
diese content-Dateien sind wieder php-Dateien, welche verschiedenen Code ausführen und eine HTML-Ausgabe gestalten.
Also ich habe ein ähnliches Problem gehabt, aber ich wollte gerade nicht immer verschiedenen PHP-Code, da Navigation, Header, Footer zumindest bei mir immer genau denselben HTML-Code haben(sollen).
Ich habe eigtnlcih pro Seite immer 1 Template, welches dann selber header.tpl, footer.tpl. und navi.tpl läd:
meinscript.php:
include 'smarty.class.php';
$tpl = new Smarty;
$tpl->assign('test', 'hallo!');
tpl->display('meinscript.tpl');
meinescript.tpl:
{include file="header.tpl"}
<!-- mein HTML-Code -->
<table>
<tr>
<td>
Dem Template wurde folgender Wert übergeben: {$test}
</td>
...
{include file="navi.tpl"}
...
</td>
</tr>
</table>
{include file="footer.tpl"}
header.tpl:
<html>
<head>
...
<body>
...
footer.tpl
</body>
</html>
navi.tpl:
<p>link1</p>
<p>link2</p>
Nur mal so rein prinzipiell. Eine weitere Variante wäre noch, dass man eine Template-Datei erstellt, die nur alle Dateien einbindet, zumindest header, footer und body, und dann übergibt man diesem Template den Dateinamen des Body-Templates und die normalen Variablen, dann braucht man nicht in jedem Template {include header.tpl}...
Also so:
meinscript.php:
include 'smarty.class.php';
$tpl = new Smarty;
$tpl->assign('test', 'hallo!');
$tpl->assign('body', 'meinscript.tpl');
tpl->display('basic.tpl');
basic.tpl:
{include file="header.tpl"}
{include file=$body}
{include file="footer.tpl"}
meinescript.tpl:
<!-- mein HTML-Code -->
<table>
<tr>
<td>
Dem Template wurde folgender Wert übergeben: {$test}
</td>
...
{include file="navi.tpl"}
...
</td>
</tr>
</table>
header.tpl:
<html>
<head>
...
<body>
...
footer.tpl
</body>
</html>
Bedenke dass Variablen die Du mit $tpl->assign an das Template übergibst allen eingebundenen Dateioen ebenfalls zur Verfügung stehen. Natürlich kannst Du so auch mehrere Dateien "dynamisch" einbinden, wenn gleich ich mich immer fragen würde ob das sein muss.
Das kannst Du auch auf Dein Problem anpassen, Indem Du z.B. sowas machst:
basic.tpl:
{include file="header.tpl"}
<table>
<tr><td>{include file=$oben}</td></tr>
<tr><td>{include file=$unten}</td></tr>
</table>
{include file="footer.tpl"}
usw...
Setze ich jetzt das Template-System um habe ich eine main.htm und eine main.php
in der main.htm sind jetzt die Bereiche für die Includes mit einem Variablennamen gekennzeichnet und in der main.php bekommen sie einen Wert zugewiesen. Jetzt müssten diese Bereiche aber wieder php-Dateien laden, welche eine Ausgabe in HTML erzeugen, also ihrerseits wieder ein Template aufrufen.
Wenn das denn unbedingt so sein muss, würde ich evtl. mal drüber nachdenken ob es nicht besser mit includes() in PHP funktioniert, die php-scripte einbinden die dann wiederum Templates laden. Wobei ich das nicht so sauber fände. Smarty bieten unglaublich viele Möglichkeiten, bis hin zu eigenen Plugins, ich würd emdal damit ein wenig testen, vielleicht kommst Du ja damit zu einer guten Lösung.
Verstehst Du was ich meine?
Ich hoffe schon :)
Viele Grüße
Andreas