Ik ben bezig met het maken van een template systeem voor een website die ik onderhoud. Nu heb ik een indeling gemaakt met classen, echter ik weet niet zeker of ik op de goede manier bezig ben.
Welke classen heb ik:
Uitleg: Een template bestaat uit een htmlfile met daarin bbcode achtige blokken. Deze blokken hebben de volgende indeling: [typeblok=blokindentifier] (bijv. [var=datum] of [tem=guestbookitem]). Zodra een template geparsed wordt worden deze blokken uitgelezen en opgevraagd via de goede functie van het DataObject. De verschillende type blokken zijn:
Welke classen heb ik:
Templatepicker | Haalt een template uit een file en cached deze. |
SingleTemplate | De eigenlijke template class. Hiervan heb ik hieronder de sourcecode weergegeven. |
Dataobject | Een klasse die in ieder geval 4 methoden heeft, nl. getData, getVariable, getTemplate en getLang |
Uitleg: Een template bestaat uit een htmlfile met daarin bbcode achtige blokken. Deze blokken hebben de volgende indeling: [typeblok=blokindentifier] (bijv. [var=datum] of [tem=guestbookitem]). Zodra een template geparsed wordt worden deze blokken uitgelezen en opgevraagd via de goede functie van het DataObject. De verschillende type blokken zijn:
- var (waar een constante geplaatst word zoals datum)
- dat (waar paginadat neergezet word)
- tem (op deze plek kunnen 1 of meerdere templates ingevoegd worden)
- lang (voor taalspecifieke woorden zoals vorige volgende en home)
- Is deze opbouw van classen verstandig? Of kan ik het beter anders indelen?
- Is de templateparser op deze manier een beetje snel? Of kan het beter met preg_replace() of ereg_replace()?
- In regel 39 en 41 zet ik de haken in de data om in entities om te voorkomen dat data meevervangen word. Is dit op deze manier handig of kan ik dit beter anders doen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| <? class SingleTemplate { var $template; var $dataob; //constructor (for initiating template). Dataobject has to be a class implementing the dataobject functions function SingleTemplate($templatepartname, $dataobject) { $this->template = $GLOBALS['now']['templpicker']->getTemplate($templatepartname); $this->dataob = $dataobject; $this->parse(); } function parse() { preg_match_all("@\\[[a-zA-z]+=[a-zA-Z]+\]@",$this->template,$outputarr); $outarr = array(); print_r($outputarr); foreach ($outputarr[0] as $j=>$k) { $posis = strpos($k,'='); $foris = substr($k,1,$posis-1); $afteris = substr($k, $posis+1, strlen($k)-$posis-2); switch ($foris) { case "dat": $outarr[$j] = $this->dataob->getData($afteris); break; case "lang": $outarr[$j] = $this->dataob->getLang($afteris); break; case "var": $outarr[$j] = $this->dataob->getVariable($afteris); break; case "tem": $outarr[$j] = $this->dataob->getTemplate($afteris); break; default: $outarr[$j] = ""; } } $outarr = str_replace("[","[",$outarr); $this->template = str_replace($outputarr[0],$outarr,$this->template); $this->template = str_replace("[","[",$this->template); } } ?> |