Ich habe mich jetzt nochmal heran gewagt, ein eigenes Templatesystem zu basteln.
Die PHP-Datein sind so aufgebaut:
functions.php
index.php
Die Templates:
header.tpl
index.php
footer.tpl
So, wie man im Anhang sehen kann, funktioniert das bis auf die Schleifen.
Das erste Problem ist, dass ich keine Arrays an eine Fuktion übergen kann und
zweitens kein Array global erklären kann und wenn, dann weiß ich nicht wie.
Ich hätte sonst die Datensätze aus der Datenbank geholt, in ein Array gepackt, bearbeitet und dann ausgegeben.
Das Ganze sollte dann auch universell funktionieren.
Hat noch irgend einer eine Idee?
Danke schon mal im Voraus.
Die PHP-Datein sind so aufgebaut:
functions.php
PHP-Code:
<?php
function get_template($infile)
{
$tempfile=file($infile.'.tpl');
$loopwhile=0;
$loopfor=0;
$loop=0;
$if=0;
$once=1;
for($i=0;$i<count($tempfile);$i++)
{
preg_match_all('/\{([a-zA-Z0-9_]+)\}/',$tempfile[$i],$matches);
for($j=0;$j<count($matches[0]);$j++)
{
if($once==1)
{
$replacement=$matches[1][$j];
global $$replacement;
$tempfile[$i]=str_replace($matches[0][$j],$$replacement,$tempfile[$i]);
$resulttext[$i]=$tempfile[$i];
}
}
$results=preg_match_all('/\[(.*)\]/',$tempfile[$i],$matches);
if($results>0)
{
for($j=0;$j<count($matches[0]);$j++)
{
$templatefunction=preg_split('/[^a-zA-Z0-9_\/]/',$matches[1][$j]);
}
if($templatefunction[0]=='if')
{
$if++;
}
if($templatefunction[0]=='include')
{
$include++;
include($$templatefunction[1]);
}
if($templatefunction[0]=='while')
{
$once=0;
$loopwhile++;
}
if($templatefunction[0]=='/while')
{
$loopwhile--;
if($loopwhile==0) $once=1;
}
if($templatefunction[0]=='for')
{
$once=0;
$loopfor++;
}
if($templatefunction[0]=='/for')
{
$loopfor--;
if($loopfor==0) $once=1;
}
}
$resulttext[$i]=$tempfile[$i];
}
if($loopwhile!=0 || $loopfor!=0)
{
echo "\$loopwhile: $loopwhile und \$loopfor: $loopfor<br/>";
die('Mit dem Template stimmt irgend etwas nicht. <h1>Abbruch</h1>');
}
else
{
$once=1;
$loop=0;
}
echo(implode('',$resulttext));
}
?>
PHP-Code:
<?php
include('functions.php');
$css='css/home.css';
$artikel=(isset($_GET['artikel']))?$_GET['artikel']:"Kein Artikel vorhanden.";
$REMOTE_ADDRESS=$_SERVER['REMOTE_ADDR'];
$HOST_ADDRESS=$_SERVER['HTTP_HOST'];
$mysql['text']=array("Datensatz1","Datensatz2");
$text=$mysql['text'][1];
$image='./bilder/Deutschlandfahne.svg';
$imagetype='image/svg+xml';
$imagename='Deutschlandfahne';
$or_de='oder';
$or_en='or';
$lang='de';
$typeor='or_'.$lang;
$or=$$typeor;
get_template('templates/header');
get_template('templates/index');
get_template('templates/footer');
?>
header.tpl
PHP-Code:
<link rel="stylesheet" type="text/css" href={css}>
<object data={image} type={imagetype} width="100%" height="300px">Image: {imagename}</object>
<font>
<table width="100%">
<tr><td valign="top">
<table>
<tr><td valign="top" class="table menue">
<a href="?artikel=Dies ist meine erste Homepage"><h1>Home</h1></a>
<a href="?artikel=computer">Computer</a><br>
<a href="?artikel=fahnen">Fahnen</a><br>
<a href="?artikel=grafikkarten">Grafikkarten</a>
<hr />
<h1><center>SVG - Scripte</center></h1>
<a href="?grafik=Fahne">SVG-Fahne</a>
<a href="?grafik=Liebeserklaerung">Liebeserklärung</a>
</td>
</tr>
</table>
</td>>
PHP-Code:
<td>
<table width="100%">
<tr>
<td><h1><center>{artikel}</center></h1><hr></td>
</tr>
[while mysql text]
<tr>
<td>{text}</td>
</tr>
[/while]
</table>
</tr>
PHP-Code:
<tr><td colspan="3">
<hr>
Internet: {HOST_ADDRESS}<br /><br />
E-Mail: <a href="mailto:quickjoe@web.de">quickjoe@web.de</a> {or} <a href="mailto:aldifahne@freenet.de">aldifahne@freenet.de</a><br /><br />
<hr>
Ihre IP-Adresse ist: {REMOTE_ADDRESS}
</td></tr>
</table>
Das erste Problem ist, dass ich keine Arrays an eine Fuktion übergen kann und
zweitens kein Array global erklären kann und wenn, dann weiß ich nicht wie.
Ich hätte sonst die Datensätze aus der Datenbank geholt, in ein Array gepackt, bearbeitet und dann ausgegeben.
Das Ganze sollte dann auch universell funktionieren.
Hat noch irgend einer eine Idee?
Danke schon mal im Voraus.
Kommentar