Jak docílím routy článku bez action?

snazimse
Člen | 43
+
0
-

Ahoj,

nějak jsem nepochopil styl routování, prosil bych o radu od profíka.

Cílová url by měla vypadat: https://mujweb.cz/…esika-to-vis

Mám presenter Stranka, nepodařilo se mi to jinak než s kl.uvedením action navíc, což tam nechci…
To znamená třeba:

https://mujweb.cz/…esika-to-vis

Tvar:

$router[] = new Route('<presenter>/<action>/[/<article>]', 'Clanky:view');

Jenže to Nette se chová, že důsledně musím mít

https://mujweb.cz/clanky/ = Presenter Clanky

a Action

https://mujweb.cz/…nejaka-akce/ = Vyzaduje akci pro vykresleni do nejaka-akce.latte

Toto <action> nechci, aby mi to šlo na pevně danou šablonu.

Potřeboval bych to, abych měl presenter a hned volitelný parametr jako seo-url podle databáze názvu článku
ne žádnou pevnou akci v url, kde musím mít další šablonu u které je pevně daný název, Nette mě jinak nepustí a vyhodí Err exception…

Z toho co jsem našel jsem nenašel žádné řešení, které by mi fungovalo. Prosím poradí někdo jak to zapsat, jde to přes výchozí router?

Děkuji předem :)

Editoval snazimse (2. 6. 2017 22:55)

trta911
Člen | 32
+
+1
-

Ahoj, snad poradím.

Toto

$router[] = new Route('<presenter>/<action>/[/<article>]', 'Clanky:view');

nahraď tímto

$router[] = new Route('clanky[/<article>]', 'Stranka:view');

a pak v presenteru StrankaPresenter.php

public function renderView($article)
{
   sql select from tabulka where url = $aricle...
}

no a šablona pak v templates/Stranka/view.latte

To by mělo fungovat.

Editoval trta911 (3. 6. 2017 1:05)

filsedla
Člen | 101
+
+1
-

Identifikace akce určitě není v routě povinná, ale Nette musí vědět, jakou akci spustit. Řekneš ji právě druhým parametrem Route.

Napsal bych to v podstatě stejně jako @trta911. Všimni si, že v routě se vůbec nemusí vyskystovat <presenter> nebo <action>. Article je název presenteru a ten má jednou akci actionDefault($slug) (akce se ale může jmenovat jakkoliv).

$router[] = new Route('clanky/<slug>', 'Article:default');
snazimse
Člen | 43
+
0
-

Děkuji Vám :)