[Templatesystem] Code in Variable einlesen

Nightstalker123

Grünschnabel
Hi,

ich habe mir ein kleines (zwar sehr einfaches aber es geht) Templatesystem geschrieben und möchte jetzt gerne bestimmten PHP Code über eine Variable an das Template weitergeben wie z.B. das an der stelle wo z.B. $header steht das dann die header.tpl eingefügt wird.

Den Code zum Aufrufen eines Templates welchen ich benutze lautet:

PHP:
eval ("echo \$site= \"".getTemplate($page)."\";");

Ich hab mir das so in der Art vorgestellt (geht natürlich nicht):

PHP:
$header = eval ("echo \$site= \"".getTemplate($header)."\";");

Würde mich freuen wenn mir jemand dabei helfen könnte (fals irgendjemand durch diesen Wirrwar durchsteigt welchen ich hier fabriziert habe).

Liebe Grüße Nightstalker123
 
Hier so ist ein kleines System, was du suchst:

index.php
PHP:
<?php
function get($filename,$filepath="templates/",$string_length=1500)
    {
    $fileid=fopen($filepath.$filename.".tpl","r");
    while (!feof($fileid))
        {
        $filetext.=preg_replace('&"&','\"',fgets($fileid,$string_length));
        }
    fclose($fileid);
    return $filetext;
    }

//GLOBAL
$doctype = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">";
$board_name = "Test";

//HEADINCLUDE
$headinclude = get("headinclude");
eval ("\$headinclude = \"$headinclude\";");

//HEADER
$header = get("header");
eval ("\$header = \"$header\";");

//INDEX
$index = get("index");
eval ("\$index = \"$index\";");

$output = $index;
echo preg_replace('&\\\"&',"\"",$output);
?>

templates/index.tpl
HTML:
$doctype
<html>
<head>

$headinclude

</head>
<body>

$header

</body>
</html>

templates/headinclude.tpl
HTML:
<title>$board_name</title>

templates/header.tpl
HTML:
<table width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr align=center>
  <td>Header!</td>
 </tr>
</table>

WICHTIG:
Wenn du etwas ersetzt, und das was du ersetzt hat einen Teil der auch ersetzt wird, dann muss du das "innerste" zuerst bearbeiten.

Und jetzt noch mal auf Deutsch ^^ :
Bei mir habe ich "board_name" unter //GLOBAL gepackt und damit als 1. abgearbeitet, dann kommt das "headinclude" als 2. und zum Schluss "index" als 3.
Code:
Dummy-Code:
<index>                                //als 3.
  <headinclude>                        //als 2.
    <board_name>Test</board_name>      //als 1. / "innerstes"
  </headinclude>
</index>

Der Quelltext sieht am Ende bei mir so aus:
HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>

<title>Test</title>

</head>
<body>

<table width="100%" border="0" cellpadding="0" cellspacing="0">
 <tr align=center>
  <td>Header!</td>
 </tr>

</table>

</body>
</html>

Ich hoffe ich konnte dir helfen! ;)
cya,
swffilms

P.S.: Ich konnte das jetzt leider nicht noch genauer erklären, weil ich ebenhalt nicht viel Zeit habe :( ;)
 
Zurück