podmínka v latte – dle cookie něco vypsat
- H0w4rd
- Člen | 96
Předně se omlouvám za takovýto dotaz, rád bych se Nette jednou naučil, bohužel teď na to nemám prostor (musím se věnovat jiným projektům), ale dostal jsem za úkol udělat jednoduchou úpravu v jednom webu napsaném v Nette:
Pokud v nějaké cookie je jeden řetězec, na jednom místě webu se má
vypisovat něco jiného. Ten řetězec jsem našel v jednom latte souboru.
Takže bych potřeboval poradit, jak v .latte souboru udělat podmínku:
if (nějaká cookie obsahuje něco), tak {vypiš aaabbb} else { vypiš cccdd }
Asi celkem jednoduchá věc, bohužel bez detailnějšího studia frameworku to nejsem schopný udělat, proto prosím bylo by možné mi pomoct, abych to dokázal upravit?
- nanuqcz
- Člen | 822
{if @$_COOKIE['foo'] == 'bar'}
aaabbb
{else}
cccdd
{/if}
Čistý způsob to asi nebude, ale bude to fungovat.
P.S. Docela by mě zajímalo, jestli na tohle nějaký „čistý způsob“ v Nette je? Nette nabízí třídy pro práci se sessions, ale pro cookies o ničem nevím. Tak nevím, jestli není návrhově špatné sahat si přímo do cookies? :-)
- David Matějka
- Moderator | 6445
nejcistejc je to asi pres Nette\Http\Request metodu getCookie
takze v presenteru
public function renderFoo()
{
$this->template->showBar = $this->request->getCookie('foo')=='bar';
}
a v latte akorat
{if $showBar}
...
{else}
...
{/if}
EDIT:
pripadne bez zasahovani do presenteru a pouziti primo v sablone bude asi
lepsi nez
{if @$_COOKIE['foo'] == 'bar'}
tohle
{if $presenter->request->getCookie('foo') == 'bar'}
Editoval matej21 (27. 6. 2013 12:50)
- H0w4rd
- Člen | 96
OK, možná se to bude někomu hodit, jak by mělo vypadat čisté řešení?
Abych trochu přiblížil, o co mi jde – na jednom webu je natvrdo
v latte souborech zadáno telefonní číslo (asi na
30 místech) a zákazník chce, když v cookies je určitá hodnota, tak aby
všude bylo jiné telefonní číslo.
Napsal jsem phone.latte s tou podmínkou a pak projdu všechny
latte s telefony a nahradím je includem toho
phone.latte. Tohle je nejjednodušší řešení.
Ještě bych vlastně potřeboval, abych všude mohl mít stejný příkaz,
tzn. absolutní cestu v includu, nebo aspoň relativní od kořene, na to jsem
taky nepřišel, ale to už je detail, prostě někde bude
{include ‚../../phone.latte‘} a někde třeba
{include ‚../../../../phone.latte‘}
Editoval H0w4rd (28. 6. 2013 9:13)
- H0w4rd
- Člen | 96
OK, při studiu, jak udělat původní zamýšlené řešení, jsem se „omylem“ naučil Nette víc, než jsem chtěl a holt to tedy udělám trochu lepším způsobem :-)
V BasePresenteru v startup() dám
nastavení $this->template->phoneNumber podle cookie.
A potom v latte souborech budu pouze vypisovat
{$phoneNumber}.
Děkuji za pomoc.
Editoval H0w4rd (28. 6. 2013 14:07)