Získání parametru z URL v šabloně

- Grelek
- Člen | 233
Zdravím,
mám URL, která vypadá asi takhle /read-more/article-1, kde
1 je ID. V základní šabloně, kde mám rozcestník na články,
je menu, které vypadá takhle.
ODKAZ
Perex
A já chci udělat, že po kliknutí na odkaz, se v menu „zaktivuje a rozbalí“ aktuální položka podle ID. Tedy to bude vypadat takto.
AKTIVNÍ ODKAZ
Obsah
ODKAZ
Perex
Hledal jsem, ale nenašel jsem, jak (jestli vůbec) se dá v Latte získat parametr z URL. Prosím o radu, jak by jste to udělali vy.

- ViPEr*CZ*
- Člen | 822
Takovej návod https://forum.nette.org/…ault-stranka?p=2
a nenašel jsi jo?
Prvně bych si asi nepředával takto složitě ID. Tj. předělal bych ten
odkaz na toto: /read-more/article/1 či /read-more/article?id=1
IDéčko pak bude dostupné v příslušné metodě render a nic nebrání tomu
si ho poslat do šablony jako nějakou proměnnou. https://latte.nette.org/cs/#…

- Grelek
- Člen | 233
ViPErCZ napsal(a):
Takovej návod https://forum.nette.org/…ault-stranka?p=2 a nenašel jsi jo?
Prvně bych si asi nepředával takto složitě ID. Tj. předělal bych ten odkaz na toto: /read-more/article/1 či /read-more/article?id=1
IDéčko pak bude dostupné v příslušné metodě render a nic nebrání tomu si ho poslat do šablony jako nějakou proměnnou. https://latte.nette.org/cs/#…
Díky.
Návod… no, je pravda, že se mi to teď vymstilo (příště to budu lépe formulovat, aby se mi to nemohlo vrátit =D), ale schválně si zkus napsat do Googlu pár jednoduchý hesel, která tě k tomuhle tématu napadnou.

- Grelek
- Člen | 233
Asi bych si měl dát na pár dní volno, mám úplně vymeteno.
Presenter
public function actionDetail($id)
{
$this->template->articles= $this->articleFacade->getArticles();
$this->template->article = $this->articleFacade->getArticle($id);
$this->template->id = $id;
}
URL /read-more/article/1
Proč je $id NULL, když získání jednoho
článku podle stejné proměnné $id funguje?!

- Grelek
- Člen | 233
Asi to bude tou routou, mám je nastavené takhle.
$this->getParameter("id") také vrací NULL.
// administrace
$container->router[] = new Route('admin/<presenter>/<action>/[<id>]', array(
'module' => 'Admin',
'presenter' => 'Sign',
'action' => 'default',
));
// pro blog
$container->router[] = new Route('<presenter>/<action>/<slug>', array(
'module' => 'Front',
'presenter' => 'Blog',
'action' => 'default',
));
// tahle routa se nás týká
$container->router[] = new Route('<presenter>/<action>[/<id>]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
));

- ViPEr*CZ*
- Člen | 822
Není zač. Jj na to se mrkni. Každopádně je vidět, že ty routy máš úplně stejné, proto se to prvně zastaví na tý co je definovaná dříve a tudíž poslední parametr se jmenuje slug a ne id. Prakticky pro oba případy použij jednu routu a v každém případě ten poslední parametr bude mít stejné jméno ve všech presenterech.

- Jan Mikeš
- Člen | 771
Ta posledni routa ti podle me nebude fungovat spravne :) pouze pokud budes mit vyplnene ID i SLUG, ale pokud budes chtit vyplnit pouze slug bez id, tak se slug bude povazovat za ID, [/<id>] lze nahradit za [/<id [0–9]+>] tim padem pokud tam bude cokoliv neciselneho aplikace by to mela povazovat za slug a ne za id, avsak to musis vyzkouset.

- Grelek
- Člen | 233
Lexi napsal(a):
Ta posledni routa ti podle me nebude fungovat spravne :) pouze pokud budes mit vyplnene ID i SLUG, ale pokud budes chtit vyplnit pouze slug bez id, tak se slug bude povazovat za ID, [/<id>] lze nahradit za [/<id [0–9]+>] tim padem pokud tam bude cokoliv neciselneho aplikace by to mela povazovat za slug a ne za id, avsak to musis vyzkouset.
V téhle aplikaci se nikdy nestane, že bych tahal zároveň ID
i SLUG. Ale díky za tip, určitě to v budoucnu použiju =).

- Jan Mikeš
- Člen | 771
No prave!! Kdyz budes chtit tahat slug a nebudes mit vyplnene id tak ti slug bude povazovat za ID, mozna jsi spatne precetl co jsem napsal :) tva routa by fungovala pouze v pripade:
- nebudes mit uvedeno ani id ani slug
- budes mit uvedeno pouze id
- budes mit uvedeno i id i slug
a nebude fungovat pokud budes mit slug ale ne id, coz osetruje urceni ze id je pouze ciselna hodnota ;)