Impi Mitglied
Angemeldet: 06.05.2006 Beiträge: 530
|
Verfasst am: 26.08.2006, 12:07 Titel:
[Snippet] Templateklasse |
|
|
|
|
So, ich habe hier mal wieder ein super Klasse für euch in meiner Trickkiste gefunden .
Die Klasse filtert den Inhalt der angegebenen Datei auf Keywords die in einem Array bestimmt sind und ersetzt den Wert der Platzhalter entweder durch einen Text oder den Inhalt einer Datei.
So sieht die Klasse aus:
Code: |
<?PHP
class template{
#Klassenvariablen
var $strFilename = "";
var $arrayValues = array ();
var $strTPL = "";
#Ende
#Konstrunktor
function template($path,$filename,$values){
// Inhalt der zu parsenden Templatedatei wird in $tpl gespeichert und die HTML-Atribute
// an den Pfad zum $filename angepasst.
$tpl = implode ("",file($path.$filename));
$tpl = preg_replace ("=background\=\"(?!http)(.*?)\"=si","background=\"".$path."\\1\"", $tpl);
$tpl = preg_replace ("=src\=\"(?!http)(.*?)\"=si","src=\"".$path."\\1\"", $tpl);
// Übermittelte Werte werden den Klassenvariablen zugewiesen
$this->strTPL = $tpl;
$this->strFilename = $filename;
$this->arrayValues = $values;
}
#Ende
// Function die den neuen Text/HTML-Code als Return zurück gibt
function startParsing(){
// Jeder Eintrag der $arrayValues array(); wird durch die kommende Schleife gejagt
foreach ($this->arrayValues as $value_1 => $value_2) {
if(file_exists($value_2)){ // Wenn der 2te Spaltenwert von $arrayValues eine Datei ist und existiert ...
ob_start(); // Wird ein Puffer für die Ausgabe initialisiert ...
include ($value_2); // Die Datei in den Puffer includiert ...
$value_2 = ob_get_contents(); // $value_2 bekommt ihren den Wert der ehemaligen Datei die in $value_2 verzeichnet war
ob_end_clean(); // Und der Puffer wird wieder geschlossen und aufgeräumt
};
// Der Inhalt von $value_2 wird auf runde Klammern durchsucht und durch das passende HTML-Tag ersetzt
$value_2 = str_replace ('{', "{", $value_2);
$value_2 = str_replace ('}', "}", $value_2);
// Die Klassenvariable mit dem Inhalt der Templatedatei wird erneuert bzw. der Platzhalter { .$value_1. } mit dem passenden Wert der zu includierenden Datei $value_2 ersetzt
$this->strTPL = str_replace ('{' . $value_1 . '}', $value_2, $this->strTPL);
}
// Neuer Text/HTML-Code wird ausgegeben
return $this->strTPL;
}
function killTemplate(){
unset($this->strFilename);
unset($this->arrayValues);
unset($this->strTPL);
}
};
?>
|
Wie immer ist alles kommentiert. Bei Fragen zu Klassen: [url=http://forum.9dots.de/viewtopic.php?t=3000]Guckst du hier ...[/url
Und so findet die Klasse verwendung:
Code: |
<?PHP
// Die Klasse wird includiert
include("class_template.php");
// Die zu ersetzenden Werte werden bestimmt
$values = array (
'title' => 'Titel',
'text' => 'text.txt',
'hello' => 'Hello World'
);
// Das Object $tpl wird mit der Klasse Template initialisiert
$tpl = new template("templates/","index.tpl", $values);
// Das Dokument wird geparst und ausgegeben
echo $tpl->startParsing();
// Der Dekonstruktor wird gestartet und das Object aus dem Speicher gelöscht
$tpl->killTemplate();
unset($tpl);
?>
|
Die zu ersetzende Datei liegt im Ordner "templates" und heisst "index.tpl".
Folgender HTML-Code ist enthalten:
Code: |
<html>
<head>
<title>{title}</title>
</head>
<body>
{hello}<br>
{text}
</body>
</html>
|
Die Ausgabe sieht dann so aus:
Code: |
<html>
<head>
<title>Titel</title>
</head>
<body>
Hello World<br>
Hier steht dann der Text!
</body>
</html>
|
Alle Dateien sind nochmal hier zu sehen: http://sevenstudios.info/files/SNIPPETS/PHP/KLASSEN/TEMPLATE/
Impi
P.S.: Die Platzhalter müssen im HTML-Code immer in {} Klammern stehen. |
|