[PHP] Template vraagje

Pagina: 1
Acties:

  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Hoi,

Ff een vraagje. Ik ben weer ff verder gegaan met m'n forum en ga me nu meer met het uiterlijk bezig houden. Dus ik heb me ff verdiept in templates. Ik snap het allemaal wel, maar toch zit ik nog met 1 ding...
Ik gebruik nu Xtemplate. Nu ben ik bezig met een forum en moet er boven een knop login komen te staan als ze niet ingelogd zijn en een knop logout als ze ingelogd zijn. Maar hoe doe ik dit nu efficient? Khad het volgende al(simpel gezegd dan):
code:
1
2
3
4
5
6
<!-- BEGIN: login -->
<a href="login.php">Login</a>
<!-- END: login -->
<!-- BEGIN: logout -->
<a href="logout.php">Logout</a>
<!-- END: logout -->

En dan laat ik als $logged == 1 het logout deel parsen en anders het login deel.
Maar nu moet ik dit dus in _elk_ script zetten. Dus in elk script:
PHP:
1
2
3
4
5
6
7
8
9
<?
if (logged == 1){
    $template->parse("logout");
}
else
{
    $template->parse("login");
}
?>

Zoiets iig....

Weet niemand een template-engine waarbij je ook naar een variabele kunt kijken en aan de hand daarvan iets kan laten parsen? In dit geval is het namelijk wel makkelijk. Scheelt een hoop regels in m'n scripts. Of misschien een andere oplossing?
(Tis vooral makkelijk als je later toch iets verandert wilt hebben, hoef je niet alles te veranderen)

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Ik werkt sowieso nooit met die template dingen maar volgens mij kan je met elke template-engine gewoon HTML in je variabele proppen:
PHP:
1
2
3
4
5
6
<?
if ($logged == TRUE)
  $loginButton = "<a href=#>Logout</a>";
else
  $loginButton = "<a href=#>Login</a>";
?>

of korter B-)
PHP:
1
2
3
<?
$loginButton = $logged ? "<a href=#>Logout</a>" : "<a href=#>Login</a>";
?>

En dan in je template gewoon die variabele opnemen op de plaats waar je die link wilt hebben.

EJ

This can no longer be ignored.


  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
Tuurlijk grappenmaker, maar dan kun je net zo goed geen templates gebruiken, of mijn oplossing gebruiken. Dan moet je het namelijk nog steeds in elke pagina zetten EN komt er html in je php te staan....

  • Roel
  • Registratie: Februari 2000
  • Laatst online: 14-09 16:10

Roel

screen -x addict

Ik ken je templates niet, maar zit er geen #if in ?
Dus dan krijg je iets van
PHP:
1
2
3
4
5
6
7
<?
#if logged in
   <a href="#">inloggen</a>
#else
   <a href="#">uitloggen</a>
#endif
?>

Altans, zo doe ik het.. :)

Resistance is futile (If < 1 Ohm)


  • tomato
  • Registratie: November 1999
  • Niet online
Op dinsdag 30 oktober 2001 22:03 schreef Roel het volgende:
Ik ken je templates niet, maar zit er geen #if in ?
Dus dan krijg je iets van
PHP:
1
2
3
4
5
6
7
<?
#if logged in
   <a href="#">inloggen</a>
#else
   <a href="#">uitloggen</a>
#endif
?>

Altans, zo doe ik het.. :)
Zit volgens mij niet in XTemplate, maar je zou het er zelf in kunnen bouwen :Y)

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Op dinsdag 30 oktober 2001 21:47 schreef MikeN het volgende:
Tuurlijk grappenmaker, maar dan kun je net zo goed geen templates gebruiken, of mijn oplossing gebruiken. Dan moet je het namelijk nog steeds in elke pagina zetten EN komt er html in je php te staan....
Sinds wanneer mag/kan er geen HTML in je PHP? Als je een keer van template wisselt, heb je toch in een mum van tijd die paar scriptjes ook aangepast?

Natuurlijk moet je de code in elk script (script != pagina) opnemen, maar dat lijkt me logisch aangezien je die check of een persoon is ingelogd ook in elk script moet opnemen.

Als je echt die-hard geen HTML in je scripts wil opnemen, volgt uit m'n vorige oplossing natuurlijk deze:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if ($logged == TRUE) {
  $ButtonUrl = "logout.php";
  $ButtonText = "Logout";
}
else {
  $ButtonUrl = "login.php";
  $ButtonText = "Login";
}
?>

En dan in je template die $ButtonUrl en $ButtonText in je HTML zetten |:(

Suc6, EJ

This can no longer be ignored.


Verwijderd

Het is denk ik het makkelijkste om er een function van te maken en die te includen, dat is het kortste, hoef je alleen maar de volgende regel boven je pagina te zetten:
logged();

lekker kort met hetzelfde effect. Functie bouwen gaat zo:

function logged($naam, $naam2){
if($naam){
PRINT "bladiebla, $naam2";
} else {
PRINT "$naam 2, bladiebla";
}
}

Functie gebruiken gaat dan zo:
logged(blaat, bladiebla);
en je krijgt dan dit:
bladiebla, bladiebla

Even heel kort uitgelegd voor het geval je dat nog niet wist, waarschijnlijk ook wel, maar dan voor de newbies die stiekum meekijken :P
Voor de rest moet je maar op php.net kijken...

  • Roel
  • Registratie: Februari 2000
  • Laatst online: 14-09 16:10

Roel

screen -x addict

is een template niet bedoelt om makkelijk en snel een pagina aan te passen zonder in php scripts te gaan vroeten ?

Stel dat iemand 't design doet en een ander inlogknopje wil hebben ofzo, die moet dan weer in jou php source gaan duiken om iets te veranderen.. Als je een goede templateengine hebt kun je het gewoon doen op de manier die ik ook al voorstelde, anders moet je toch eens naar een andere gaan zoeken..

Resistance is futile (If < 1 Ohm)


  • tomato
  • Registratie: November 1999
  • Niet online
Ik doe het zelf zo:
PHP:
1
2
3
4
<?
// $session_vars = array(Login=>true, Name=>"Piet", etc);
$it->assign("SESSION", $session_vars);
?>

En dan in de template:
code:
1
{{SESSION.Login}?Hoi {SESSION.Name}, bent ingelogd!:Je bent niet ingelogd}

Op die manier kun je alles doen in je template wat je maar wilt. Plaatjes om aan te geven of je ingelogd bent, links naar loginform wel of niet weergeven, etc.
Maar dat kan niet (zonder zelf wat te hacken) in XTemplate geloof ik :P

  • Roel
  • Registratie: Februari 2000
  • Laatst online: 14-09 16:10

Roel

screen -x addict

Op dinsdag 30 oktober 2001 22:26 schreef tomato het volgende:
Op die manier kun je alles doen in je template wat je maar wilt. Plaatjes om aan te geven of je ingelogd bent, links naar loginform wel of niet weergeven, etc.
Welke templates gebruik je dan ?
Want degene die ik nou gebruik werkt fijn alleen die heeft een bug, in een loop (tabeleke van een database maken bijvoorbeeld) kan ik geen if's gebruiken en dat is best lastig..

Resistance is futile (If < 1 Ohm)


  • tomato
  • Registratie: November 1999
  • Niet online
Op dinsdag 30 oktober 2001 22:29 schreef Roel het volgende:
Welke templates gebruik je dan ?
Degene die ik zelf bij elkaar gehackt heb :P
Nee, (nog?) geen Open Source.
Want degene die ik nou gebruik werkt fijn alleen die heeft een bug, in een loop (tabeleke van een database maken bijvoorbeeld) kan ik geen if's gebruiken en dat is best lastig..
Dat is geen bug, dat is een missing feature ;)
Je zou kunnen proberen het er zelf in te bouwen, ik weet niet of de source een beetje te begrijpen is van je template parser?

  • Roel
  • Registratie: Februari 2000
  • Laatst online: 14-09 16:10

Roel

screen -x addict

Op dinsdag 30 oktober 2001 22:32 schreef tomato het volgende:
Dat is geen bug, dat is een missing feature ;)
Je zou kunnen proberen het er zelf in te bouwen, ik weet niet of de source een beetje te begrijpen is van je template parser?
Die's vrij makkelijk... maar ik ben vergevorderde n00b :D
Zal de maker van dat scriptje wel eens wakker schoppen..

Resistance is futile (If < 1 Ohm)


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
.

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
kijk ook eens naar Integrated Template [Extension]. Is een PEAR class.

Mijn idee is dat die classes meestal erg goed werken, omdat er tenminste goed over nagedacht is.

  • frosty1878
  • Registratie: Juli 2001
  • Laatst online: 24-01 11:33
kijk eens naar de template klasse van php base library.
http://sourceforge.net/projects/phplib

-- keep it clean

Pagina: 1