Template-parser logische procedurele code
Ik ben momenteel een template-parser aan het ontwikkelen. Ik tracht hierbij de parser in 3 grote delen op te splitsen. De content, de blocks (header, content, footer, menu, ...) en tot slot het geheel. Dit doe ik d.m.v. drie aparte classes. Ik weet, daarover kan gediscussieerd worden. Ik ben van mening dat het qua gebruik en onderhoud dit eenvoudiger is dan alles in één grote class te stoppen. Maar dat ter zijde.
Zoals ik al aangaf, ik ben aan het ontwikkelen. Nu zit ik eigenlijk niet met een echt probleem maar eerder een vraag in de aard van "hoe zouden jullie het doen"?
Ik zou kunnen kiezen al mijn assigments (toevoeging van content aan blocks) achter elkaar aan te maken. Daarmee bedoel ik het volgende:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$oTemplate_Content = new Template_Content('header');
$oTemplate_Content->addAssigment('{$MENU0}', 'Home');
$oTemplate_Content->addAssigment(array('{$HEADERMENU#0}', '{$HEADERMENU#1}', '{$HEADERMENU#2}'), array('Informatie', 'Voorwaarden', 'Kopen'));
$oTemplate_Content = new Template_Content('footer');
$oTemplate_Content->addAssigment('{$COPYRIGHT}', 'Write Down');
?>
$oTemplate_Content = new Template_Content('header');
$oTemplate_Content->addAssigment('{$MENU0}', 'Home');
$oTemplate_Content->addAssigment(array('{$HEADERMENU#0}', '{$HEADERMENU#1}', '{$HEADERMENU#2}'), array('Informatie', 'Voorwaarden', 'Kopen'));
$oTemplate_Content = new Template_Content('footer');
$oTemplate_Content->addAssigment('{$COPYRIGHT}', 'Write Down');
?>
Daarna zou ik al mijn blocks kunnen aanmaken op gelijkaardige manier. Uiteindelijk parse ik het geheel en geef ik het weer.
Wat ik echter ook zou kunnen doen, is de assigments van de header opgeven. De block header aanmaken, tot slot het geheel parsen. Daarna de assigments voor het volgende block invoeren (bv. footer), de block footer dan ook effectief aanmaken en opnieuw het geheel parsen. Of in code omgezet:
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
//content toevoegen
$oTemplate_Content = new Template_Content('header');
$oTemplate_Content->addAssigment('{$MENU0}', 'Home');
$oTemplate_Content->addAssigment('{$MENU1}', 'Contact');
$oTemplate_Content->addAssigment(array('{$HEADERMENU#0}', '{$HEADERMENU#1}', '{$HEADERMENU#2}'), array('Informatie', 'Voorwaarden', 'Kopen'));
//block maken
$oTemplate_Block = new Template_Block();
$oTemplate_Block->setBlockFile('header.tpl');
/* het parsen van te template ben ik nog aan het ontwerpen
deze zal onder andere kijken of de blocks die bij content zijn gekozen ook wel effectief zijn aangemaakt. */
//content toevoegen
$oTemplate_Content = new Template_Content('footer');
$oTemplate_Content->addAssigment('{$COPYRIGHT}', 'Write Down');
//block maken
$oTemplate_Block = new Template_Block();
$oTemplate_Block->setBlockFile('footer.tpl');
/* op deze manier zou ik evt. wel opteren om het argument (footer.tpl) direct op te nemen in de constructor */
?>
//content toevoegen
$oTemplate_Content = new Template_Content('header');
$oTemplate_Content->addAssigment('{$MENU0}', 'Home');
$oTemplate_Content->addAssigment('{$MENU1}', 'Contact');
$oTemplate_Content->addAssigment(array('{$HEADERMENU#0}', '{$HEADERMENU#1}', '{$HEADERMENU#2}'), array('Informatie', 'Voorwaarden', 'Kopen'));
//block maken
$oTemplate_Block = new Template_Block();
$oTemplate_Block->setBlockFile('header.tpl');
/* het parsen van te template ben ik nog aan het ontwerpen
deze zal onder andere kijken of de blocks die bij content zijn gekozen ook wel effectief zijn aangemaakt. */
//content toevoegen
$oTemplate_Content = new Template_Content('footer');
$oTemplate_Content->addAssigment('{$COPYRIGHT}', 'Write Down');
//block maken
$oTemplate_Block = new Template_Block();
$oTemplate_Block->setBlockFile('footer.tpl');
/* op deze manier zou ik evt. wel opteren om het argument (footer.tpl) direct op te nemen in de constructor */
?>
Lees de commentaar in het script ;-)
Wat lijkt jullie het meest logisch / wat lijkt jullie het handigst?
Alvast bedankt :-).
Ja, zou ik ook doen.
Als ik met oop bezig ben, begin ik graag te denken buiten de class. Vergeet die class eens en schrijf op hoe je het object zou willen gebruiken.
Toon eens wat je zou doen, inclusief html opmaak.
Ik zie je enkel delen van de pagina behandelen.
Als voorbeeld voor een header zou ik bv het volgende kunnen hebben:
Code (php)
1
2
3
4
5
2
3
4
5
<html>
<!-- hier meta tags, style, ... etc -->
<h1>{$TITEL}</h1>
<p>{$LINKJE}</p>
<!-- ga zo maar door -->
<!-- hier meta tags, style, ... etc -->
<h1>{$TITEL}</h1>
<p>{$LINKJE}</p>
<!-- ga zo maar door -->
Maar dus wat mijn bedoeling is: dat mijn cms op eenvoudige manier de template kan genereren...