Template parser via includes - Get meegeven?
Ik loop tegen een probleempje aan. Ik ben bezig met een CMS en heb een template parser gemaakt. De template parser werkt op deze manier:
TEMPLATE.HTML
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<html>
<head>
<title>{CMS:TITLE}</title>
</head>
<body>
<H1>{CMS:TITLE}</H1>
{CMS:CONTENT}
</body>
</head>
<head>
<title>{CMS:TITLE}</title>
</head>
<body>
<H1>{CMS:TITLE}</H1>
{CMS:CONTENT}
</body>
</head>
De parser loopt er zo doorheen:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function parse_template($searchkind, $search , $replace)
{
$this->template = eregi_replace ( "{".$searchkind.":".$search."}", $replace, $this->template);
}?>
function parse_template($searchkind, $search , $replace)
{
$this->template = eregi_replace ( "{".$searchkind.":".$search."}", $replace, $this->template);
}?>
Oftuwel, in de index roep ik m zo aan:
Werkt helemaal toppie.
Nou heb ik alleen ook module support, dat werkt met includes:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$values=explode(";",getSetting('installed_modules'));
foreach ($values as $filename) {
$_GET["display"]='frontend';
$this->template=str_replace ( "{MODULE:".strtoupper(basename($filename, ".php"))."}", "<?php include('./modules/".$filename.".php'); ?>", $this->template);
}
?>
$values=explode(";",getSetting('installed_modules'));
foreach ($values as $filename) {
$_GET["display"]='frontend';
$this->template=str_replace ( "{MODULE:".strtoupper(basename($filename, ".php"))."}", "<?php include('./modules/".$filename.".php'); ?>", $this->template);
}
?>
Zo loopt hij door de geinstalleerde modules heen, en include de module waar nodig is. (via EVAL worden de includes uitgevoerd).
Nou weet ik dat je met includes een get zo mee kan sturen:
Code (php)
1
2
3
4
2
3
4
<?php
$_GET["extrawaarde"]="foo";
include("module.php"); //Module.php kan nu de get extrawaarde uitlezen
?>
$_GET["extrawaarde"]="foo";
include("module.php"); //Module.php kan nu de get extrawaarde uitlezen
?>
Alleen, stel nou dat ik in mijn template get waardes mee wil sturen, dus zo ongeveer:
{MODULE:FOTOBOEK|album=2&foto=3}
Hoe kan ik dan 'album=2&foto=3' uitlezen, en deze code uitvoeren voor de include:
Hier loop ik vast. Ik verwacht iets met regular expressions, maar ik snap hier zelf bijna niks van. Zou een van jullie me kunnen helpen?
Alvast hartelijk bedankt!
Met vriendelijke groet,
Rob Quist
Gewijzigd op 22/12/2010 13:13:05 door Rob Quist
Verder is deze bbcode parser hier op phphulp brak. Als je een php start tag hebt, moet je ook een php end tag hebben.
Een paar andere punten:
- De GET variabelen die jij gebruikt zijn geen GET variabelen. Deze komen normaal namelijk uit de url en dit kan nog wel eens een probleem opleveren als je een variabele met dezelfde naam in de url gebruikt. Gebruik elke willekeurige andere array ($aTemplateVars bijvoorbeeld), maar geen $_GET.
- Persoonlijk denk ik dat je het jezelf erg lastig maakt door op deze manier met includes te gaan werken. Het lijkt mij een mooi mix van PHP en HTML worden en dat wil je liever niet. Misschien moet je je opbouw nog eens goed overdenken?
die $_GET is inderdaad iet wat verwarrend maar vond het wel een makkelijke uitweg.
Op welke manier raad je me dan aan om modules in te kunnen laden in pagina's, via een statische template?
Op deze manier kan de gebruiker namelijk heel makkelijk {MODULE:CONTACTFORM} toevoegen in de CMS en dan verschijnt er een mooi contactformuliertje.
Edit: Laten we het er nou op houden dat ik deze code graag wil blijven gebruiken.
Kan iemand mij helpen met een reguliere expressie maken om de extra waardes uit te kunnen lezen?
Oke, laat maar - Lang leve explode.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Gewijzigd op 22/12/2010 14:57:00 door Rob Quist
kan je dat niet allemaal doen met str_replace ?
Hoe wou jij argumenten en hun waardes uitlezen via str_replate ? :P