Anbefaling av template bibliotek

Regulæruttrykk, objektorientering, samt problemstillinger omkring optimalisering og sikkerhet.

Anbefaling av template bibliotek

Innlegg tdo » 22.07.2010 10:52

Hei!

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;
  1. 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
  2. PHP 5.3 Namespaced (superpluss)
  3. 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.
Brukerens avatar
tdo
Seniormedlem
 
Innlegg: 1466
Registrert: 27.01.2005 23:35
Bosted: Oslo

Re: Anbefaling av template bibliotek

Innlegg stadskle » 22.07.2010 13:14

Dette har vært debattert mange en gang på dette forumet og mange andre. Men vi kan godt ta en runde til :-) Først vil jeg si at de kravene du stiller passer ikke helt med "lettvekts" bibliotek, du lister opp ganske mye fuksjonalitet.

Svaret mitt er enkelt: Smarty. Nå kommer det til å komme mangt et angrep på Smarty i de neste trådene, og ja det er mange som ikke liker Smarty så skal ikke si at dette er eneste fasiten. Men, jeg har brukt dette mye og er meget fornøyd. Jeg er også en av dem som liker at det bruker et metaspråk, jeg synes templates skrevet i ren PHP er fryktelig rotete, men det er en smakssak. Så for å svare på kravene dine:

Smarty er nå i versjon 2.6.26, men har kommet langt med en stor oppgradering (3.0). Dette er en kjempeoppgradering som har vært i test lenge nå, RC3 er ute og jeg ser fram til en som er klar til bruk. Jeg kommer til peke på de stedene du trenger 3.0 for oppfylle kravene dine.

Inkludering og reversert arv: I dag så kan du inkludere hvilken som helst mal inne i en annen. Arv i maler kommer først med 3.0, men jeg kjenner ikke detaljene i den funksjonaliteten.

Plugins: Ja, det er enkelt å utvide med plugins. Det finnes mange som er ferdig og det er lett å skrive egne.

Cache: Ja det er et cache system og dette blir meget forbedret i 3.0

Holder seg unna output: Dette bestemmer du selv, så ja.

Åpen kildekode: Ja

Bonuser:

1. Den skjønte jeg ikke helt.
2. Nei, men Smarty 3.0 er PHP 5.0
3. Støttes via plugins (jeg kjører dette selv, smarty+gettext)
Brukerens avatar
stadskle
Seniormedlem
 
Innlegg: 1495
Registrert: 29.05.2003 9:45
Bosted: Oslo

Re: Anbefaling av template bibliotek

Innlegg tdo » 22.07.2010 15:07

Takk for flott svar stadskle!

Jada, diskutert i det uendelige, men det kan aldri bli spesifikt nok :) Og angående lettvekt har du forsåvidt rett, så la meg omformulere: Prosjektene som bruker rammeverket skal være lett å lage, administrere, skalere og samtidig være oversiktlig. Det jeg mener med lettvekt er at kjernen skal være rett på sak uten ekstra tull, så skal man heller ha frihet til å velge sine egne bibliotek, rutiner og preferanser.. Jeg lar denne ligge til jeg er mer klar og skriver en post om rammeverket.

Smarty er vurdert og står fortsatt på listen. Jeg var ikke klar over den nye versjonen, som uten tvil gir Smarty noen bonuspoeng. Mitt største problem med Smarty er at det er mulig å kødde det til like mye som PHP selv. Med funksjoner og plugins uten hemninger, som ikke har noe i templates å gjøre(jeg tror jeg har sett databasespørringer i Smarty :shock:). Det største forden er selvfølgelig den allerede eksisterende brukermassen, kunnskap og tillegg.

Angående bonus #1 mener jeg at man kan pre-parse templates, gjerne til PHP(/bytecode). Eksempel:
Kode: Merk alt
<h1>{{ title }}</h1>

Blir til
Kode: Merk alt
<h1><?php echo $title; ?></h1>

Før man går videre og setter inn de faktiske verdiene. Dette er kun med tanke på cache og optimalisering, og med Smarty's optimaliser tror jeg ikke det skal være noe å bry seg ytterligere med.

Smarty er notert og skal da testes ordentlig for å gjøre opp en egen mening. Takk for svar!
Brukerens avatar
tdo
Seniormedlem
 
Innlegg: 1466
Registrert: 27.01.2005 23:35
Bosted: Oslo

Re: Anbefaling av template bibliotek

Innlegg stadskle » 22.07.2010 15:24

tdo skrev:Angående bonus #1 mener jeg at man kan pre-parse templates, gjerne til PHP(/bytecode). Eksempel:
Kode: Merk alt
<h1>{{ title }}</h1>

Blir til
Kode: Merk alt
<h1><?php echo $title; ?></h1>

Før man går videre og setter inn de faktiske verdiene. Dette er kun med tanke på cache og optimalisering, og med Smarty's optimaliser tror jeg ikke det skal være noe å bry seg ytterligere med.

Det stemmer, det er akkurat det Smarty gjør.

tdo skrev:Mitt største problem med Smarty er at det er mulig å kødde det til like mye som PHP selv. Med funksjoner og plugins uten hemninger, som ikke har noe i templates å gjøre(jeg tror jeg har sett databasespørringer i Smarty :shock:).

Tja, mulig er det jo. Men kan også konfigureres. Jeg kjører alltid Smarty i et modus der dette ikke er mulig, man kan altså slå av muligheten for å benytte PHP-kode i templaten (som ikke finnes i Smarty funksjoner). Hvis man ønsker å kjøre enda strengere linje (som jeg også gjør) så kan man whiteliste de PHP funksjonene som skal være tilgjengelig, og man kan styre slik at brukere ikke kan gjøre mye tull i templatene (hvis de ikke får skrive egne plugins da).
Brukerens avatar
stadskle
Seniormedlem
 
Innlegg: 1495
Registrert: 29.05.2003 9:45
Bosted: Oslo

Re: Anbefaling av template bibliotek

Innlegg DavidS » 22.07.2010 16:06

http://www.twig-project.org/ og http://phpti.com/ (Django-like)
http://dwoo.org/
http://components.symfony-project.org/templating/

Jeg er såpass nedkjørt nå, at jeg ikke tar meg tid med å skrive så mye. Leste hele posten din, men spørsmålet sto litt uklart.. håper jeg kan fungere etter litt kaffe og søvn..
Utvikling: http://davidsteinsland.net | Blogg: http://blog.davidsteinsland.net | Din link her? 100 000 kr/året.
Brukerens avatar
DavidS
Seniormedlem
 
Innlegg: 3317
Registrert: 17.05.2006 17:08
Bosted: Bømlo

Re: Anbefaling av template bibliotek

Innlegg tdo » 28.07.2010 15:16

Takk for gode tilbakemeldinger(selv om du, DavidS, gjorde det stikk motsatte av hva jeg ba om kom det forsåvidt til nytte :D). Og beklager jeg har brukt litt tid på å svare.

Da har jeg tittet en del rundt og gjort meg opp en mening. Twig er det som for meg er penest. Det går også hånd i hånd med resten av django-tankegangen jeg prøver å legge meg på. Det er også veldig nær i kodestil, både til meg selv, Doctrine og Zend. Twig blir med andre ord standard.

Smarty endte opp med å bli litt for mye, men hva rammeverket angår skal det være lett å tilpasse det til Smarty(og andre).

Prosjektet er oppe på GitHub, men det finnes ingen dokumentasjon. Til gjengjeld er det sikkert masse bugs. Forøvrig ingen unit tests eller noe særlig annet å skryte av heller. Med andre ord: På egen risiko.
Brukerens avatar
tdo
Seniormedlem
 
Innlegg: 1466
Registrert: 27.01.2005 23:35
Bosted: Oslo


Gå til Avansert PHP

Hvem er i forumet

Brukere som leser i dette forumet: Ingen registrerte brukere og 1 gjest