Zjištění aktuální šablony
- Draffix
- Člen | 146
Zdravím, řeším teď problém s přesměrováním a unsetu sessions. Mám dva objekty, basket a order. V order presenteru mám toto, pokud v košíku nic není:
protected function startup() {
parent::startup();
if (!isset($_SESSION["cart"]) || $_SESSION["cart"] == null) {
$this->redirect('Basket:');
}
}
A při dokončení objednávky, tedy při přesměrováním na jinou šablonu (Order:complete), bych potřeboval udělat unset $_SESSION[„cart“]. Jenže když to udělám před přesměrováním, tak mě to automaticky hodí na defaultní šablonu presenteru Basket. Když to dám po přesměrování tak se ten unset neprovede. Lze tedy do výše ukázaného kódu přidat nějak podmínku, aby to fungovalo všude, krom tehdy, že je aktuální šablona Order:complete?
- Draffix
- Člen | 146
nanuqcz napsal(a):
Draffix napsal(a):
Když to dám po přesměrování tak se ten unset neprovede.
To znamená, že tento kód ti nefunguje?
Funguje, jenže když se mi to unsetuje tak se mi automaticky vyprázdní košík a bude platit podmínka ze startupu, takže se mi namísto přesměrování na šablonu complete provede přesměrování na basket:default
- marek-m
- Člen | 66
nanuqcz ti chcel povedat, ze to v startup mas uplne zbytocne, ako nevidim tam dovod pre takuto podmienku, skor kontroluj veci v jednotlivych krokoch objednavky. inak sessions sa lepsie pouziva takto
- nanuqcz
- Člen | 822
Draffix napsal(a):
jenže když se mi to unsetuje tak se mi automaticky vyprázdní košík a bude platit podmínka ze startupu
To moc nechápu… startup()
se volá vždy
před render*()
. Takže při spuštění
Order:complete
to bude probíhat nějak takto:
- Nejdřív se spustí metoda
startup()
. Session v téhle době existuje, takže přesměrování se neprovede. - Pak se provede metoda
renderComplete()
. Zde vymažeš session a vykreslíš co potřebuješ.
Pozn.: Pokud bys v takovém stavu načetl stránku znovu, tak ano,
session už nebude existovat a provede se přesmérování. Při prvním
načtení Order:complete
ale k přesměrování nedojde.
Pozn.2: Pokud v šabloně Order/complete.latte
pracuješ
s hodnotama session, tak budeš mít problém, protože session sis v render
metodě smazal. V takovém případě to mazání session dej do metody
shutdown()
, která se provádí vždy až po vykreslení
šablony.
Pozn.3: Více o všech těch metodách presenteru a o tom, která se
spouští dřív a která později, se dočteš v dokumentaci:https://doc.nette.org/…n/presenters#… :-)
- Draffix
- Člen | 146
@marek-m
Díky, to mě nenapadlo dát to do těch kroků
nanuqcz
Znám životní cyklus prezenteru a jak funguje, jen jsem chtěl, aby se mi
session vymazaly, šablona se vykreslila a zároveň nedošlo ke směrování.
Jenže jsem to chtěl aby se to provedlo ještě dříve, než bych musel znovu
načíst stránku (pak až se to smazání session projeví). Jo a v šabloně
už session nepotřebuju, přece bych si nesmazal něco, co bych ještě
potřeboval :-)
Každopádně jsem to už vyřešil těmi jednotlivými kroky, oběma moc díky za pomoc