Før noen klager, er jeg ikke på jakt etter tilsvarende informasjon som i tråden "Utvikling av templatemotor".
Jeg holder for tide på å utvikle et lettvekt rammeverk inspirert av Django. Jeg har ingen planer om å utvikle hele verktøykassen fra bunn, da det finnes en rekke glimrende verktøy allerede. Verktøykassen er fortsatt temmelig tom, og kommer til å være det så lenge som mulig. Men jeg er nødt til å fylle opp med minst et ORM og en template motor. ORM er en no-brainer(Doctrine), så det er template motoren som er spørsmålet.
Det jeg ønsker fra dere er personlige erfaringer og anbefalinger. Jeg er på jakt etter en template motor som har så lett vekt som mulig. Den trenger ikke å ha en arme av plugins, og kan godt holde seg til de enkleste struktur kommandoer. Faktisk heller mindre enn mer.
Men det er noen ting jeg krever;
Inkludering og reversert arv
Det må i en hvilken som helst mal være mulig å inkludere en annen mal. Den bør støtte rekursiv inkludering. Hvordan variabler håndteres kan være fritt.
Det må også være mulig å definere en foreldremal for en hver mal. Altså at en mal "inkluderer seg selv" i en annen. Dette innebærer at det er mulig å definere områder som skal overskrives av den valgte malen.
Forklares bedre med litt kode:
base.html
- Kode: Merk alt
<html>
<head>
<title>My page</title>
</head>
<body>
<div id="nav">...</div>
<div id="content">{% block content %}Fallback tekst{% endblock %}</div>
</body>
</html>
dashboard.html
- Kode: Merk alt
{% extends 'base.html' %}
{% block content %}
<h1>Dashboard</h1>
<p>Dette overskriver "Fallback tekst".</p>
{% endblock %}
Output
- Kode: Merk alt
<html>
<head>
<title>My page</title>
</head>
<body>
<div id="nav">...</div>
<div id="content">
<h1>Dashboard</h1>
<p>Dette overskriver "Fallback tekst".</p>
</div>
</body>
</html>
Plugins
Systemet må på en eller annen måte kunne utvides enkelt med plugins. De må kunne defineres og inkluderes runtime. Detaljer om denne er åpen.
Cache
Det må være mulig å cache resultatet. Det trenger ikke være eksisterende funksjonalitet for dette, da det uansett skal en egen cache modul inn i bildet, og det beste er om det er mulig å bruke samme backend. Kriteriet er altså at det er mulig å få til cache, ikke nødvendigvis at det er fungerende alt.
Holder seg unna output
Systemet må på ingen måte prøve å sende noe til output selv. Det skal kun returnere resultatet som en string, så det kan prosesseres videre.
Åpen kildekode
Jeg kommer ikke langt om det ikke er mulig for meg å bruke systemet, så det må ha en lisens som åpner for fritt bruk. Det er også et krav at det kan bygges på og rundt.
---
I tillegg er det en del bonuser;
- Om det er mulig å generere et flatt template uten å rendre ferdig. Altså at all statisk inkluderinger er gjort på forhånd(i know.. vanskelig med rekursiv inkludering), men variabler er uforandret
- PHP 5.3 Namespaced (superpluss)
- I18N er en stor fordel. Om det ikke ligger støtte i grunnsystemet må det i alle fall være mulig å løse med plugins
Igjen; Jeg spør om personlige erfaringer. Listen over systemer er lett å google seg til, men å gjøre seg opp en endelig mening er vanskelig uten å få testet alle. Og det tar tid.
PS: Ja. Dere kan forvente å se en release av rammeverket under en åpen lisens om relativt kort tid.
