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

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

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
+
0
-

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
+
0
-

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.

ViPEr*CZ*
Člen | 814
+
0
-

Ber prosím s humorem ;-) Taky jsem spíš prokročilejší začátečník ;-) Doufám, že ti to pomohlo.

Grelek
Člen | 233
+
0
-

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?!

ViPEr*CZ*
Člen | 814
+
0
-
public function actionDetail($id)
{
    Nette\Diagnostics\Debugger::dump($id);
    $this->template->articles= $this->articleFacade->getArticles();
    $this->template->article = $this->articleFacade->getArticle($id);
    $this->template->id = $id;
}

$id je NULL ?

Grelek
Člen | 233
+
0
-

Ano. Pro jistotu jsem smazal cache a už nefunguje ani získávání jen článku.

Jan Mikeš
Člen | 771
+
+1
-

Toto je taky NULL? :

	$this->getParam("id");
ViPEr*CZ*
Člen | 814
+
0
-

Grelek napsal(a):

Ano. Pro jistotu jsem smazal cache a už nefunguje ani získávání jen článku.

Tak máš asi blbě routu.

ViPEr*CZ*
Člen | 814
+
0
-

Lexi napsal(a):

Toto je taky NULL? :

	$this->getParam("id");

Není náhodou getParam Deprecated? Použij getParameter.

Grelek
Člen | 233
+
0
-

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
+
0
-

Podle mě ti to spadne do té druhé routy pro blog. Tudíž parametr se nejmenuje id, ale slug. Schválně zkus vyměnit id za slug a schválně jestli to pojede. :-)

Editoval ViPEr*CZ* (30. 8. 2012 15:11)

Grelek
Člen | 233
+
0
-

Moc díky, aspoň vím, v čem mám mezery (spíš roklinu) =).

Už se budu konečně muset podívat na tu přednášku o routování =D.

ViPEr*CZ*
Člen | 814
+
0
-

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.

Grelek
Člen | 233
+
0
-

Už jsem vše změnil, teď mám tohle.

new Route("<presenter>/<action>[/<id>][/<slug>/]", array(
    'module' => 'Front',
    'presenter' => 'Homepage',
    'action' => 'default',
));

A vypadá to, že všechno funguje =). Ještě jednou díky.

Editoval Grelek (30. 8. 2012 15:28)

Jan Mikeš
Člen | 771
+
0
-

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
+
0
-

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
+
0
-

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:

  1. nebudes mit uvedeno ani id ani slug
  2. budes mit uvedeno pouze id
  3. 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 ;)

Grelek
Člen | 233
+
0
-

Aha! No vidíš, toho jsem si ani nevšiml, díky! Já jsem si to před tím přečetl a pochopil jsem to tak, že to mám blbě pro případ, kdy je vyplněno ID i SLUG =D.

Jan Mikeš
Člen | 771
+
0
-

Mozna jsem to mohl formulovat lepe, ale ted uz aspon vis jak to je a chapes v cem je problem ;)