Hi,
bastle nun schon seit tagen an einem kleinen Template Parser für andere projekte von mir...
klappt eigentlich auch alles ganz gut nur hab ich absulut keine idee wie ich verschachtelte blocks realisieren kann.
genau das ist mir für die klasse aber sehr wichtig da ich teilweise menüs habe bei denen die untermenüs erst nach einem klick angezeigt werden.
link1
-link1.1
-link1.2
link2
-link2.1
-link2.2
im moment kann ich nur einfache while blocks ausführen...
hier mal der code dafür:
index.php
tpl_parser.php
Habe mit der funktion schon so viel rumprobiert... aber anstatt das ich was produktives mache geht eher meine arbeit kaputt
Wie gesagt, so wie sie jetzt ist parst sie nur einfache blocke...
der teil der tpl datei für die news mit meinen arrays und platzhaltern (in der index.php festgelegt) würde zB so aussehen:
PS: worüber ich mir auch schon gedanken gemacht habe...
wenn ich jetzt das (mit hoffentlich eurer hilfe *g*) auf verschachtelte blöcke umgebaut habe... ist es dann überhaupt möglich so eine menüstruktur wie ganz am anfang beschrieben zu machen? gebe ich im template einen block an wird er ja auf jeden fall ausgeführt (bzw sobald ich die funktion parse_block($name, $array) aufrufe)... müsste ich die funktion dann so umbauen das die blocks abhängig von globalen variablen gearst werden? zB wenn menue = 1 parse untermenue 1?!?!
Finde das alles sehr verwirrend sowieso hab ich nen Knoten im Kopf seit ich mit reg. Ausdrücken angefangen hab *g*
Ich hoffe sehr ihr könnt mir ein bisschen helfen den zu lockern
grüße lordsepp
bastle nun schon seit tagen an einem kleinen Template Parser für andere projekte von mir...
klappt eigentlich auch alles ganz gut nur hab ich absulut keine idee wie ich verschachtelte blocks realisieren kann.
genau das ist mir für die klasse aber sehr wichtig da ich teilweise menüs habe bei denen die untermenüs erst nach einem klick angezeigt werden.
link1
-link1.1
-link1.2
link2
-link2.1
-link2.2
im moment kann ich nur einfache while blocks ausführen...
hier mal der code dafür:
index.php
PHP-Code:
// Laden und starten der Template-Klasse
require('tpl_parser.php');
$template = new tpl_parser;
.
.
.
// Inhalte für Blocks
$news[0] = array (
'n.time' => '22.06.04 - 21:47',
'n.user' => 'm.orp.heu.s',
'n.text' => 'Ich bin eine Nachricht...!');
$news[1] = array (
'n.time' => '23.06.04 - 17:22',
'n.user' => 'm.orp.heu.s',
'n.text' => 'Ich bin noch eine Nachricht...!');
$news[2] = array (
'n.time' => '24.06.04 - 23:42',
'n.user' => 'm.orp.heu.s',
'n.text' => 'Und noch eine...!');
$menue[0] = array (
'm.link' => '?id=0',
'm.title' => 'Link 0');
$menue[1] = array (
'm.link' => '?id=1',
'm.title' => 'Link 1');
.
.
.
// Blocks mit Inhalten ersetzen
$template->parse_block('news', $news);
$template->parse_block('menue', $menue);
// Ausgabe
$template->output();
tpl_parser.php
PHP-Code:
.
.
.
function parse_block($blockname, $array)
{
preg_match('/'.$this->start.'START-BLOCK-'.$blockname.$this->ende.'(.*)'.$this->start.'ENDE-BLOCK'.$this->ende.'/isU', $this->template, $match);
$reblock = $match[0];
$block = $match[1];
$nextblock = $match[1];
if (is_array($array)) {
for ($a=0; $a < count($array); $a++)
{
preg_match_all('/'.$this->start.'(.*)'.$this->ende.'/isU', $block, $match);
for ($b=0; $b < count($match[0]); $b++)
{
$replace = $match[0][$b];
$platzhalter = $match[1][$b];
$name = array_keys($array[$b]);
$block = str_replace($this->start.$platzhalter.$this->ende, $array[$a][$name[$b]], $block);
}
if ($a >= count($array)-1) { // Wenn die Anzahl der Datensätze erreicht ist wird kein Block mehr angehängt
$block = $block; }
else {
$block = $block.$nextblock; }
}
$this->template = str_replace($reblock, $block, $this->template); }
}
.
.
.
Wie gesagt, so wie sie jetzt ist parst sie nur einfache blocke...
der teil der tpl datei für die news mit meinen arrays und platzhaltern (in der index.php festgelegt) würde zB so aussehen:
PHP-Code:
{START-BLOCK-news}
{n.time} von {n.user}<br>
{n.text}<br><br>
{ENDE-BLOCK}
wenn ich jetzt das (mit hoffentlich eurer hilfe *g*) auf verschachtelte blöcke umgebaut habe... ist es dann überhaupt möglich so eine menüstruktur wie ganz am anfang beschrieben zu machen? gebe ich im template einen block an wird er ja auf jeden fall ausgeführt (bzw sobald ich die funktion parse_block($name, $array) aufrufe)... müsste ich die funktion dann so umbauen das die blocks abhängig von globalen variablen gearst werden? zB wenn menue = 1 parse untermenue 1?!?!
Finde das alles sehr verwirrend sowieso hab ich nen Knoten im Kopf seit ich mit reg. Ausdrücken angefangen hab *g*
Ich hoffe sehr ihr könnt mir ein bisschen helfen den zu lockern
grüße lordsepp
Kommentar