Hoi allemaal.
De situatie
Ik zit op dit moment met een (homebrew) templating systeem dat vrij simplistisch van opzet is. HTML templates zitten in een (MySQL) database, en ik laat PHP deze opvragen en echo-en. Allemaal heel simpel en aardig, ware het niet dat er -ook- wat dynamica aanwezig is, en wel in de volgende vorm (simpel voorbeeld):
Uiteraard gaat het puur over het weergeven van data, en wordt er geen logica in de templates verweven. Wat ik nu doe, is een bepaalde pagina op volgende wijze aanroepen:
Het alternatief
Het enige alternatief wat ik mij zo kan bedenken is gaan werken met str_replace() functies, maar ik vrees dat dat zo'n jungle aan code en bijhouden van variabelen gaat worden dat dat (onder andere) de maintainability van de code totaal niet ten goede gaat komen, zeker aangezien templates nog wel eens aangepast worden. Dat kan dan weer afgevangen worden met een (semi)globale array of zo:
Misschien zie ik een heel simpel en beter alternatief over het hoofd, maar dit lijkt me het beste voor deze situatie.
De vraag
Ik heb Programming en SEA doorgezocht om te kijken wat er zoal te vinden is over het gebruik van eval(), en de meeste resultaten behandelden practische issues die (m.i.) relatief gemakkelijk op andere wijze opgelost konden worden. Daarbij kwam meer dan eens het mantra 'eval() is vies' langs (waar ik het overigens niet mee oneens ben, aangezien het in veel gevallen niet de juiste 'tool' is). Het verschil met mijn situatie hierboven is dat ik er geen suitable alternatief voor kan verzinnen. Zouden jullie hier eens jullie licht op kunnen laten schijnen?
De situatie
Ik zit op dit moment met een (homebrew) templating systeem dat vrij simplistisch van opzet is. HTML templates zitten in een (MySQL) database, en ik laat PHP deze opvragen en echo-en. Allemaal heel simpel en aardig, ware het niet dat er -ook- wat dynamica aanwezig is, en wel in de volgende vorm (simpel voorbeeld):
code:
1
| <td>Naam: $username</td> |
Uiteraard gaat het puur over het weergeven van data, en wordt er geen logica in de templates verweven. Wat ik nu doe, is een bepaalde pagina op volgende wijze aanroepen:
PHP:
1
2
3
4
5
6
7
8
9
| <?php // Username verkregen vanuit database $username = 'Piet'; // getTemplate('template') roept bovenstaande template aan $template = eval('echo "'.getTemplate('template').'";'); ?> |
Het alternatief
Het enige alternatief wat ik mij zo kan bedenken is gaan werken met str_replace() functies, maar ik vrees dat dat zo'n jungle aan code en bijhouden van variabelen gaat worden dat dat (onder andere) de maintainability van de code totaal niet ten goede gaat komen, zeker aangezien templates nog wel eens aangepast worden. Dat kan dan weer afgevangen worden met een (semi)globale array of zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php // (semi)globale array met uit database verkregen data $parsables['username'] = 'Piet'; // Roep bovenstaande template aan $myTemplate = getTemplate('template'); // Parsen kan evt. in een functie foreach ($parsables as $key => $value) { $myTemplate = str_replace('$'.$key, $value, $myTemplate); } echo $myTemplate; ?> |
Misschien zie ik een heel simpel en beter alternatief over het hoofd, maar dit lijkt me het beste voor deze situatie.
De vraag
Ik heb Programming en SEA doorgezocht om te kijken wat er zoal te vinden is over het gebruik van eval(), en de meeste resultaten behandelden practische issues die (m.i.) relatief gemakkelijk op andere wijze opgelost konden worden. Daarbij kwam meer dan eens het mantra 'eval() is vies' langs (waar ik het overigens niet mee oneens ben, aangezien het in veel gevallen niet de juiste 'tool' is). Het verschil met mijn situatie hierboven is dat ik er geen suitable alternatief voor kan verzinnen. Zouden jullie hier eens jullie licht op kunnen laten schijnen?
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290