Avatar billede mysli Nybegynder
11. november 2006 - 23:43 Der er 5 kommentarer

I gang med Smarty

Efter har have været i gang med php i forohldvis lang tid, var jeg efterhåndne nødt til at se på Smarty motoren.

Jeg har dog en del problemer - lad mig sætte problemstillingen som eksempel op:

Jeg har en side, som er delt op i 3, venstre, midt og højre.
i højre side vil jeg eks. have min loginboks/brugermenu afhængig af om man er logget ind.

Før ville jeg bare lave et kald til en funktion, som testede om man er logget ind, og derefter udskriver det html der skal til.
Kan ikke se hvordan det kan lade sig gøre med smarty.

Lad os sige jeg har en side med en template:

"<div>{$indhold}</div>"


Indholdet kan så være i form af forskellige moduler, som hver især har forskellige templates - altså ville det kræve en form for $smarty->display inde i en template.

Håber i forstår mit spørgsmål og er ret sikker på der findes en logisk løsning, jeg kan bare ikke se den lige nu.
Avatar billede mysli Nybegynder
12. november 2006 - 02:28 #1
Håber dette kan hjælpe lidt. Bruger denne tpl fil:


<html>
    <head>
        <title>x</title>
        <link rel="Stylesheet" type="text/css" href="smarty/templates/cc.css">
    </head>
    <body>
        <div align="center">
            <table height="100%"
                <tr>
                    <td></td>
                </tr>
               
                <tr>
                    <td>
   
                        <table width="800" id="container">
                            <tr>
                                <td id="navigation">
                                    {include file='navigation.tpl'}
                                </td>
                            </tr>
                            <tr>
                                <td id="content">
                                    {$indhold}
                                </td>
                            </tr>
                        </table>
                   
                    </td>
                </tr>
       
                <tr>
                    <td></td>
                </tr>
            </table>
        </div>
    </body>
</html>

Indholdet henter henter jeg fra databasen, hvor der er oprettet flere afsnit til hver side. Nogen med ren tekst og nogen med et modul som kører sammen med en template-fil. Hvordan får jeg indkluderet et sådan modul, sammen med en templatefil?

Jeg kan jo ikke køre display('x-modul.tpl'), har prøvet at sætte en variabel til det;

$x = $smarty->display('x-modul.tpl'); og derefter assigne den så den bliver vist under indhold, men det kan ikke lade sig gøre.
Avatar billede 7th Praktikant
12. november 2006 - 04:39 #2
Lyder som om det er fetch() funktionen du leder efter.

http://smarty.php.net/manual/en/api.fetch.php

Eksempel:

$smarty->assign('inner_template_data', $inner_template_data);
$inner_template = $smarty->fetch('inner_template.tpl');

$smarty->assign('indhold', $inner_template);
$smarty->display('template.tpl');
Avatar billede mysli Nybegynder
12. november 2006 - 12:43 #3
Du har helt ret, jeg er nødt til lige at læse manualen igennem en ekstra gang. Smid et svar.
Avatar billede olebole Juniormester
13. november 2006 - 15:02 #4
<ole>

- men inden du kaster dig for langt ud over den skrænt, kunne det være, du skulle prøve at teste Smarty's performance - eller finde en side, hvor det er gjort.

Jeg testede den på et tidspunkt - og det overbeviste mig om, at stort set, hvad somhelst andet ville være mere udbytterigt at beskæftige sig med  ;o)

/mvh
</bole>
Avatar billede 7th Praktikant
13. november 2006 - 17:11 #5
Svarer :o)

Mht. performance, så er det korrekt, som olebole anslår, at det ikke er Smartys stærkeste side. På den anden side, så har den en brugervenlig tilgang til templating, som er let at forstå og arbejde med.

Hvis du blot har brug for en simpel motor, så kast et blik på denne artikel, http://www.sitepoint.com/article/beyond-template-engine, som gør brug af PHPs eget indbygget "template" syntaks.

Pricippet er det samme:

En assign funktion til at tilføje data.
En display funtion til at vise indholdet.

Fetch funktionen er blot en kombination af de to ovenstående, der i stedet for at udskrive indholdet, returnerer indholdet :o)
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