Avatar billede kongfjong Nybegynder
11. april 2009 - 16:29 Der 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?

Håber der er nogen har nogle gode links :)
Avatar billede olebole Juniormester
11. april 2009 - 17:33 #1
<ole>

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  =)

/mvh
</bole>
Avatar billede j4k0b Nybegynder
11. april 2009 - 17:35 #2
Jeg har ikke selv brugt ob_-funktionerne i php. Det er umiddelbart meget nemmere at benytte noget færdigbygget som f.eks. Smarty eller TAL:

http://www.smarty.net/
http://phptal.motion-twin.com/

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").
Avatar billede kongfjong Nybegynder
11. april 2009 - 18:18 #3
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?
Avatar billede olebole Juniormester
11. april 2009 - 20:21 #4
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);
}

Så kan du kalde funktionen fra HTML-koden:

<div class="article_container">
    <?php writeArticles( $_GET["catID"] ) ?>
</div>

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
Avatar billede kongfjong Nybegynder
11. april 2009 - 21:05 #5
Uh lyder spændende ole:)

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?
Avatar billede olebole Juniormester
11. april 2009 - 21:38 #6
1) Ja, så vil du have en fil med en DB-klasse, som er specifik postres, mysql - or-what-ever.

2) Næsten. Jeg ville hente logik funktionerne ind i præsentations filerne med include/require  =)
Avatar billede kongfjong Nybegynder
11. april 2009 - 22:32 #7
Okay:)

Tak for hjælpen, jeg går den vej ole, så lig et svar :)
Avatar billede olebole Juniormester
12. april 2009 - 20:44 #8
Selvtak  ;o)

Kik i øvrigt på MySQLI:
    http://dk2.php.net/manual/en/book.mysqli.php

- og prepared statements:
    http://dk2.php.net/manual/en/mysqli-stmt.prepare.php

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  =)
Avatar billede olebole Juniormester
12. april 2009 - 21:11 #9
Tak for points  ;o)
Avatar billede kongfjong Nybegynder
12. april 2009 - 21:16 #10
Done og tak:) Det kaster jeg mig også ud i :)

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?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester