Het template systeem van mijn CMS'je werkt als volgt: de gebruiker kan een html bestand schrijven met daarin een aantal {tokens}. Dat is de template. De tokens worden dan ingelezen en vervangen door functie outputs. Klein voorbeeld:
Dus bijvoorbeeld {news} wordt vervangen door een aantal nieuwsartikelen. Het aantal artikelen dat uit de database getrokken wordt, kun je instellen in het admin gedeelte. Dit is alleen onhandig. Daarom wil ik nu het volgende systeem opzetten en volgends mij worden dat ook wel macro's genoemd:
De functie getNews() moet nu aangeroepen worden met de waarde 5 voor $number. Ik heb hiervoor goed gezocht op internet en op de GoT zoekfunctie, maar vind nergens een tutorial hoe je {tokens} kunt uitbreiden zodat ze meer informatie door kunnen geven. Ik heb een aantal problemen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| function getNews($number) { $output = ''; $result = db_query("SELECT * FROM news LIMIT %d", $number); while ($article = db_fetch_array($result)) { $output.= '<p>'.$article['text'].'<br>'.$article['date'].'</p>'; } return $output; } $news = getNews(get_setting('number_of_articles')); $body = getBody(); // $tpl komt normaal uit database... $tpl = '<html><head><body><p>{news}</p><p>{body}</p>'; $tags = array('{news}', '{body}'); $repl = array($news, $body); $html = str_replace ($tags, $repl, $tpl); echo $html; |
Dus bijvoorbeeld {news} wordt vervangen door een aantal nieuwsartikelen. Het aantal artikelen dat uit de database getrokken wordt, kun je instellen in het admin gedeelte. Dit is alleen onhandig. Daarom wil ik nu het volgende systeem opzetten en volgends mij worden dat ook wel macro's genoemd:
PHP:
1
| $tpl = '<html><head><body><p>{news, 5}</p><p>{body}</p>'; |
De functie getNews() moet nu aangeroepen worden met de waarde 5 voor $number. Ik heb hiervoor goed gezocht op internet en op de GoT zoekfunctie, maar vind nergens een tutorial hoe je {tokens} kunt uitbreiden zodat ze meer informatie door kunnen geven. Ik heb een aantal problemen:
- Ik kan nu niet meer zoeken op vaste needles (zoals {news}), want de vorm kan verschillen ({news, 3}, {news, 8} of zelfs {news,4} -- zonder spatie)). Hoe begin ik met het zoeken naar zo'n vorm in de template?
- Hoe roep ik vervolgens op correct wijze de (bijvoorbeeld getNews()) functies aan?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."