Avatar billede lopolla123 Nybegynder
30. april 2006 - 22:35 Der er 9 kommentarer og
1 løsning

smarty template spørgsmål

Mit spørgsmål er direkte omkring smarty template-engine

Grundlæggende er mit problem, at jeg gerne vilk anvende en individuel cookie (i forhold til et ID, der kommer fra databasen). Problemet er, at jeg brokker sig, hvis man forsøger at bruge smartys egne variabler om man vil.....

Er der nogle der kan hjælpe mig med den?

{foreach item=firm from=$arrFirmAll}
        {if $smarty.cookies.INDIVIDUELT-COOKIE-NAVN eq "Open"}
        <table id="crmLHFirmList_{$firm.firmid}" cellspacing="0" cellpadding="0" border="{#tableBorder#}" class="menuLeftBoxOpen">
        {else}
        <table id="crmLHFirmList_{$firm.firmid}" cellspacing="0" cellpadding="0" border="{#tableBorder#}" class="menuLeftBoxClosed">
        {/if}
{/foreach}
Avatar billede erikjacobsen Ekspert
30. april 2006 - 22:42 #1
Er det ikke
    {if $smarty.cookies.$navn eq "Open"}
hvis smarty variablen $navn indeholder dit individuelle navn?
Avatar billede lopolla123 Nybegynder
30. april 2006 - 22:50 #2
Jo muligvis - problemet er bare, at mit ID hedder: {$firm.firmid}, men er det muligt at lave sin løkke så jeg kun får $firmid eller endnu bedre, at man inde i template-systemet, dvs. i sin tpl-fil kan skabe variabler, så jeg fx kan lave $firmid=$firm.firmid

og bagefter lave: $smarty.cookies.$firmid eq "Open"} (hvis det så virker....)
Avatar billede erikjacobsen Ekspert
30. april 2006 - 22:52 #3
Igen efter gammel hukommelse:
{assign var=navn value=$firm.firmid}
{if $smarty.cookies.$navn eq "Open"}
Avatar billede lopolla123 Nybegynder
30. april 2006 - 23:01 #4
Optimalt - det var lige præcis således :-)

Skal dog lige en omvej, med mindre nedenstående kan skrives i én sætning (fordi jeg skal have noget tekst foran.

{assign var=navn value=$firm.firmid}
{assign var=navn value=ListFirm_$navn}

Mange tak for hjælpen :-)
Du er velkommen til at svare og få points - eller skal jeg som sædvanlig bare snuppe dem selv? ;)
Avatar billede erikjacobsen Ekspert
30. april 2006 - 23:09 #5
Du snupper dem selv. Jeg synes da også der skal kunne belønnes for at stille spændende spørgsmål.

Men jeg vil da godt lige diskutere betimeligheden i at aflæse en cookie på en designside. Vi har vist snakket om det før - det der med at opdele i præsentation og i de beregninger, der ligger til grund for præsentationen.

Her kunne man argumentere for at designsiden selvfølgelig skal kunne vise noget som åbent eller lukket (hvad det nu er), men at designsiden ikke skal vide hvor oplysningen om åbent eller lukket kommer fra. I dag er det en cookie - senere er det måske resultatet af en længere beregning.

Derfor ville jeg i dit tilfælde lave en almindelige smartyvariabel ovre i dit PHP, hvor du sætter den til "Open" hvis et eller andet passende er opfyldt i en cookie. Så'n cirka.

PHP:
  if ($_COOKIE[....]...) {
      $smarty->assign("menutype","Open");
  } else {
      $smarty->assign("menutype","Closed");
  }

Smarty:
Avatar billede erikjacobsen Ekspert
30. april 2006 - 23:09 #6
{if $menutype eq "Open"}

(fik trykket på "send" for hurtigt)
Avatar billede lopolla123 Nybegynder
30. april 2006 - 23:15 #7
Jeg kan godt følge dig, og jeg forsøger også til det bedste af min kunnen at adskille lagene, men en af de features der jo for så vidt er rigtig gode er det forhold, at den laver en løkke, og når den kører i løkken, så kan jeg jo ikke "komme tilbage" til min php.

Generelt så kører det jo noget i retning af

- konstanter
- SQL
- lav beregninger/logik
- assign til smarty
- smarty-template
- vis

eller noget i den trinvise retning.

Men er der er bedre måde at skille lagene ad?

(Cookien anvendes så til at vise lidt detaljer om en virksomhed - uden at spørge serveren - det er jo meget rart lige at vide) :-)
Avatar billede erikjacobsen Ekspert
30. april 2006 - 23:23 #8
Jeg kan jo også bare læse hvad du skriver. Din $firm kommer fra din foreach, og indeholder $firm.firmid, og måske andet. Så vil mit forslag være at udvide den med yderligere en $firm.menutype, som opbygges i din PHP-del. Din generelle fremgangsmåde er bestemt fin nok.
Avatar billede lopolla123 Nybegynder
30. april 2006 - 23:27 #9
ahhhh..selvfølgelig :-)
Det har du egentlig ret i.....det ville flytte noget logik tilbage i PHP-koden - det er nok egentlig vanens magt, idet jeg almindeligs bruges disse arrays direkte fra DB - uden at behandle dem med andet end et SQL-kald og så assigne dem til smarty, men jeg kan bestemt godt se pointen i det du siger.

Men det kræver, at jeg tænker lidt større ;)
Avatar billede lopolla123 Nybegynder
17. maj 2006 - 10:11 #10
Hej Erik - tak for hjælpen - jeg lukker spm .-)
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