Error presenter a link na „this“ v layout.latte

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
hejdav
Člen | 50
+
0
-

Čau,
řešil jste někdo link odkazjící na this v layoutu, tzn. na každé stránce webu? Problém nastane při renderování ErrorPresenteru (např. při 404).

Mám v layoutu třeba přepínání jazyka, takže n:href="this, lang => en". Rád bych to tam měl třeba i na té 404 stránce. Jenže problém je, že error presenter do „this“ předá všechny své parametry, včetně $exception. Odkaz pak vypadá nějak takhle:

Setkal jste se s tím už někdo? Ď, Vláďa

(sandbox commit 6ba6a4c)

Lukeluha
Člen | 130
+
0
-

Přidej si podmínku do layoutu {if $presenter->name == 'Error'}...{/if} a v podmínce si vyřeš nějaké odkazy v error presenteru.

Editoval Lukeluha (4. 5. 2015 15:26)

Filip Klimeš
Nette Blogger | 156
+
0
-

Ahoj,

pokud používáš ErrorPresenter, který je přibalený v sandboxu, potřebuješ znát typ chyby, abys zobrazil správnou chybovou hlášku.

Když nastane výjimka při normálním běhu a „probublá“ celou aplikací nahoru (nikde jí nechytíš), Nette zavolá ErrorPresenter a předá mu ji interně. Protože PHP je bezestavové, v dalším requestu už neví, co se stalo za chybu, a musí ji předat pomocí GET parametru. Pokud je tedy potřeba zobrazit chybovou hlášku v jiném jazyce, musí se vygenerovat takovýhle nehezký odkaz, který ale ničemu nevadí.

Pokud Ti to vadí, můžeš si vytvořit speciální akce v ErrorPresenteru a přesměrovávat na ně.

{ifCurrent Error:default}
<a n:href="Error, lang => en, code => $code">...</a> {* proměnnou $code si předáš do šablony z ErrorPresenteru *}
{else}
<a n:href="this, lang => en">...</a>
{/ifCurrent}

Editoval Filip Klimeš (4. 5. 2015 15:35)