11. april 2009 - 16:29Der er
9 kommentarer og 1 løsning
PHP Templates med OB
Hej
Jeg vil til at i gang med PHP Templates med brug af Output Buffering. Jeg kunne dog godt tænke mig at læse lidt om det, man har svært ved at finde noget om det på nettet, ud over diverse engines:)
Jeg er klar over at man deler logik og præsentation op i hver sin fil, så man har strukturen i en phtml fil f.eks., og PHP-koden i en alm. PHP fil.
Men hvordan "sætter man det sammen"? Hvordan henter men indholdet fra phtml-filen ind i OB og hvordan arbejder man videre med det man har i OB?
OB bruger store server resourcer, da du gemmer hele koden i RAM. Det er noget, man normalt kun bruger, hvis alle andre muligheder er udtømt, og der ikke findes andre løsninger. Det er normalt ikke en feature, man tilvælger med glæde =)
Jeg arbejder sjældent i PHP, men bruger TAL da det findes til mange andre sprog end PHP og er meget nemt og overskueligt (i modsætning til Smarty, hvis syntax ofte ødelægger/indvikler "flot html").
Okay, tak for inputtet ole, det var rart at vide. Hvad vil du anbefale i stedet for, hvis man vil adskille præsentation og logik? Skal man over i noget XML eller hvordan?
@j4k0b Hvis ikke man kender noget til emnet, så virker det en anelse uoverskueligt at skulle benytte en engine som TAL synes jeg?
Det kommer meget an på, hvad du skal lave - og på, hvordan man kan lide at arbejde. Du kunne have et logik lag af funktioner, som kun behandler data:
function getArticles($catID) { $res = [MYSQL_QUERY]; $aRet = array(); while ([MYSQL_FETCH]) { $aRet[] = [MYSQL_ROW]; } return $aRet; }
Øverst i din HTML 'template' kunne du så have præsentations funktioner, som passer til lige netop det design, som siden er lavet i - og som kan kaldes nede fra HTML-koden. Disse funktioner får data ved at kalde funktioner i logik laget:
function writeArticles($catID) { $aAticle = getArticles($catID); $aHtml = array(); for ($i=0,$j=count($aAticle); $i<$j; $i++) { // Helt simpelt HTML-eksempel $aHtml[] = "<div class='art'>".$aAticle[$i]["head"]."</div>"; } print implode("", $aHtml); }
I en klassisk applikation deler man op i tre lag: Database, logik og præsentation. I mit eksempel har jeg blandet de to første sammen, men man kunne med fordel lave endnu en opdeling, så man uden videre kan migrere til en anden database type - f.eks. postgres
Af nysgerrighed, hvordan ville opdelingen af database og logik, så foregå? Snakker vi en db-klasse, eller hvordan?
For at tage et meget simpelt eksempel, ville du så dele logik-laget op i en fil og præsentations-funktionerne + html, altså præsentationslaget, i en anden fil og så hente indholdet i præsentations-filen ind i logik-filen med require/include?
Så slipper du helt for at tænke på SQL-injections. Det er umiddelbar lidt irriterende, man skal til at 'starte forfra', men dels er det hurtigt lært, og dels gør det livet så meget lettere, så snart det er lært =)
Kan man egentligt sige noget om brugen af persistent connections andet end at det sløver koden en smule, fordi den udfører automatisk clean-up?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.