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 | 814
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 | 814
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 ;)