Tomarus
03.06.2005, 16:04
Guuden Taag.
Wie ich gerade (seit ein paar Tagen) an einem Templatesystem für mein 1337 Forum arbeite, stoße ich auf so einige Probleme. Im Template stehen die zu ersetzenden Variablen z.B. in der Form $global[name] für den Namen des Forums. Da ich eben nicht jeden String einzeln ersetzen möchte (wie ich es bisher, wenn ich Templates verwendet habe, gemacht habe), versuche ich jetzt, mittels preg_replace alle $global[xxx] zu suchen und durch die entsprechende Variable zu ersetzen. Ich poste mal einen Teil der Template-Klasse:
class template
{
var $str;
var $data = array();
function initialize()
{
$this->data['name'] = 'Name des Forums';
$this->data['desc'] = 'Name des Forums ist ein Forum, das sich hauptsächlich mit Videospielen befasst.';
# ...
}
function load ($file)
{
# ...
}
function replace()
{
$this->str = preg_replace ('#\$global\[(.*)\]#Uis', $this->data['\\1'], $this->str);
}
# ...
}Das Einlesen des Templates funktioniert, die Ausgabe der $data-Variablen funktioniert, wenn ich nur nach einer bestimmten $global[] suchen lassen, funktionert auch das Ersetzen - Aber auf diese Art und Weise eben nicht (Augenmerk auf die letzte entscheidende Zeile). Er scheint die $global-Variablen im Template zwar zu finden, allerdings steht an Stelle dieser in der Ausgabe nichts, anstatt der entsprechenden Variable (bei $global[name] z.B.). Muss ich bei dieser Art von Ersetzung noch irgendwas beachten, muss ich das generell anders machen oder was ist da falsch? Und gäbe es evtl. noch klügere Methoden, z.B. diese $global-Variablen automatisch durch die entsprechenden $data-, $global, $whatever-Variablen zu ersetzen?
Wie ich gerade (seit ein paar Tagen) an einem Templatesystem für mein 1337 Forum arbeite, stoße ich auf so einige Probleme. Im Template stehen die zu ersetzenden Variablen z.B. in der Form $global[name] für den Namen des Forums. Da ich eben nicht jeden String einzeln ersetzen möchte (wie ich es bisher, wenn ich Templates verwendet habe, gemacht habe), versuche ich jetzt, mittels preg_replace alle $global[xxx] zu suchen und durch die entsprechende Variable zu ersetzen. Ich poste mal einen Teil der Template-Klasse:
class template
{
var $str;
var $data = array();
function initialize()
{
$this->data['name'] = 'Name des Forums';
$this->data['desc'] = 'Name des Forums ist ein Forum, das sich hauptsächlich mit Videospielen befasst.';
# ...
}
function load ($file)
{
# ...
}
function replace()
{
$this->str = preg_replace ('#\$global\[(.*)\]#Uis', $this->data['\\1'], $this->str);
}
# ...
}Das Einlesen des Templates funktioniert, die Ausgabe der $data-Variablen funktioniert, wenn ich nur nach einer bestimmten $global[] suchen lassen, funktionert auch das Ersetzen - Aber auf diese Art und Weise eben nicht (Augenmerk auf die letzte entscheidende Zeile). Er scheint die $global-Variablen im Template zwar zu finden, allerdings steht an Stelle dieser in der Ausgabe nichts, anstatt der entsprechenden Variable (bei $global[name] z.B.). Muss ich bei dieser Art von Ersetzung noch irgendwas beachten, muss ich das generell anders machen oder was ist da falsch? Und gäbe es evtl. noch klügere Methoden, z.B. diese $global-Variablen automatisch durch die entsprechenden $data-, $global, $whatever-Variablen zu ersetzen?