Nefungjící odkaz vytvořený z proměnné
- Janek007
- Člen | 4
Ahoj,
v šabloně mám odkaz (fungující) v tomto tvaru:
<a n:href=":Docs:DocDetail: $item->id">detail</a>
Router:
$router->addRoute('dokumenty/detail/<id \d+>', 'Docs:DocDetail:default');
Odkaz funguje, i pokud v šabloně zadám id
natvrdo:
<a n:href=":Docs:DocDetail: 600">detail</a>
Na jiném místě bych potřeboval vytvořit stejný odkaz vložením proměnné:
// v presenteru
$this->template->reference = ":Docs:DocDetail: 600";
// v šabloně
<a n:href="{$reference}">detail</a>
ale tracy hlásí „No route for Docs:DocDetail: 600()“
Nevíte v čem je problém?
Díky za jakoukoliv konstruktivní odpověď.
Honza
- m.brecher
- Generous Backer | 763
@Janek007
Url ve tvaru „:Module:Presenter:action, $param“ lze použít v latte v atributu n:href, nebo v tagu {link }, pokud potřebuješ normální url pro html, použij metodu link() presenteru:
$this->template->reference = $this->link(":Docs:DocDetail:default", ['id' => 600]);
Poznámka: přehlednější je akce v odkazech vypisovat „:Docs:DocDetail:default“ místo zkráceného zápisu „:Docs:DocDetail:“
- m.brecher
- Generous Backer | 763
@Janek007
Na jiném místě bych potřeboval vytvořit stejný odkaz vložením proměnné:
// v presenteru
$this->template->reference = ":Docs:DocDetail: 600";
// v šabloně
<a n:href="{$reference}">detail</a>
Pro voči nevidim, chyba je v nesprávné syntaxi v n:href atributu v šabloně !!
$reference je symbolické url ve tvaru Module:Presenter:action a zapisuje se do n:href atributu PŘÍMO bez složených závorek !!
<a n:href="$reference">detail</a>
tohle stejně latte nezvládne, asi nejde mít v proměnné $reference současně presenter a parametr, ale tohle už zvládne:
$this->template->refPresenter = ":Docs:DocDetail:default";
$this->template->refId = "600";
<a n:href="$refPresenter, $refId">detail</a>
Nicméně lepší je přeorganizovat si kód tak, aby Jsi mohl odkazy vypisovat v šabloně standardním způsobem:
<a n:href=":Docs:DocDetail:default, id: 600">detail</a>
- m.brecher
- Generous Backer | 763
@Janek007
Ještě mě napadá poznámka bokem – entitu dokument je ideální obsluhovat na úrovni presenteru DocumentPresenter a zobrazení detailu entity na úrovni akce :detail. Z Tvojí ukázky jsem nabyl dojmu, že máš řízení o jeden level posunuté nahoru – místo presenteru modul, místo akce presenter. Samozřejmě i Tvůj způsob jde použít, ale povede Tě časem do nepřehledného kódu v projektu. Moduly je vhodné používat pro seskupení rozsáhlejších celků, např. celá administrace do modulu :Admin. Potom by i odkazy byly srozumitelnější – místo „Docs:DocDetail:“ – > „Document:detail“
- Janek007
- Člen | 4
m.brecher napsal(a):
@Janek007
Ještě mě napadá poznámka bokem – entitu dokument je ideální obsluhovat na úrovni presenteru DocumentPresenter a zobrazení detailu entity na úrovni akce :detail. Z Tvojí ukázky jsem nabyl dojmu, že máš řízení o jeden level posunuté nahoru – místo presenteru modul, místo akce presenter. Samozřejmě i Tvůj způsob jde použít, ale povede Tě časem do nepřehledného kódu v projektu. Moduly je vhodné používat pro seskupení rozsáhlejších celků, např. celá administrace do modulu :Admin. Potom by i odkazy byly srozumitelnější – místo „Docs:DocDetail:“ – > „Document:detail“
Máš pravdu. Ono se to takhle v mém kódu přímo nejmenuje, ty názvy
jsem zvolil pro ilustraci. Nechápal jsem, kde je chyba, metoda
link
to vyřešila – vaše rady mi pomohly, díky. Celé se to
týká mechanismu pro vytvoření navigačního proužku odkazů pod hlavičkou
stránky…
Ještě mi pak chvíli trvalo rozseknout problém n:href
versus
href
– pokud vygeneruji odkaz metodou presenter->link,
funguje mi pouze pokud použiju klasický HTML href
.