Ik ben bezig met het maken van een CMS en ben hiermee praktisch afgerond. Ik stuit echter nog op een probleempje.
Het werkt zo: in de database zit (wat nu van toepassing is) 1) een html-template en 2) de pagina's met hun inhoud, titel, url,...
Doormiddel van regex zoek ik in de "html-templates" naar tags, bijvoorbeeld {title} word vervangen door de titel van de huidige pagina en {content} door de inhoud. Nu zou ik echter het menu moeten parsen, iets complexer. Ik dacht eraan om een tag als deze te gebruiken: {menu}{menuitemurl}{menuitemtitle}{/menu}, zodat bijvoorbeeld dit in de praktijk ingevoegd word:
Alles tussen de {menu} en {/menu} tags moet dus herhaald worden naargelang het aantal pagina's (== aantal menuitems). Heeft iemand er een idee van hoe ik dit het best kan aanpakken? Nu geraakt ik er namelijk niet echt uit.
huidige index.php (waarmee de template en content geladen worden)
<?php
#INPUT
$sIn = 'blabla{menu}{test1}{test1}{test2}{test2}{/menu}bla bla';
#VERDELEN VAN STRING IN 3 DELEN: hetgeen voor het menu, het menu en hetgeen na het menu
list($aOut[0],$aOut[1]) = preg_split('#\{menu\}#',$sIn,2);
list($aOut[1],$aOut[2]) = preg_split('#\{/menu\}#',$aOut[1],2);
#VERDELEN VAN HET MENU IN ITEMS
$aOut[4] = explode('{',str_replace('}','',$aOut[1]));
#ITEMS VERVANGEN
$i = 1;
$aOut[1] = '';
while($i < count($aOut[4])){
$aOut[1] .= '<li><a href="'.$aOut[4][$i].'"><strong>'.$aOut[4][$i+1].'</strong></a></li>';
$i++;
$i++;
}
#EVENTUEEL HERHALEN VAN BEWERKING
#OUTPUT
echo $aOut[0].'<ul class="menu">'.$aOut[1].'</ul>'.$aOut[2];
#CONTROLE
echo '<pre>'.htmlentities(print_r($aOut,1)).'</pre>';
?>
Ik weet niet zeker of we het wel helemaal over hetzelfde hebben.
De bedoeling is dat wat tussen de {menu} en {/menu} zelfs random kan zijn, maar de tags {menuitemurl} en {menuitemtitle} binnen de {menu}{/menu} worden vervangen door de waardes die horen bij desbetreffende menuitem, deze actie word herhaald voor ieder menuitem.