ifCurrent ve vlastní komponentě

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

Zdravím,

mám vlastní komponentu pro menu a potřeboval bych porovnávat zda jsem stránce x, abych mohl položku menu označit jako class=„active“

Jenže mám trochu problém, položka menu se tvoří v administraci a vytvoří se na ni také odkaz, např. strana1

a pak předám do href hodnotu strana1 ( nepoužívám n makra )

A potřebuju použít v šabloně něco takového

<li {ifCurrent $link} class="active" {/ifCurrent}> <a href="$link"> strana </a> </li>

$link je tahán z databáze ve tvaru „/strana1“

takže výsledná url bude www.mujweb.cz/strana1

Takto to bohužel nefunguje. nevíte jak to zprovoznit?

Editoval ondrej256 (5. 8. 2014 21:15)

amik
Člen | 118
+
0
-

Tak především je nešťastné mít v databázi takto odkazy, nebylo by lepší ukládat routy, např. Homepage:strana1? Pak ti bude ifCurrent fungovat – funguje právě na routy, nikoli na url.

Pokud to z nějakého důvodu nejde (např. struktura webu je tak divoká, že přepsat to na routy by byl problém), šlo by to nějakým méně čistým řešením:

  • napsat si variantu ifCurrent pro URL sám, která porovná parametr se současnou _SERVER[‚REQUEST_URI‘]
  • donutit router přeložit URL na routu (nevím přesně, jak se dělá, začal bych zkoumáním https://api.nette.org/…ist.php.html#… ) a pak na získanou routu zavolat ifCurrent
David Kudera
Člen | 455
+
0
-

Jak píše kolega výše. Když už to musí být v db, tak jedině jako odkazy na akce, takhle to fungovat nebude. Navíc když později změníš nějak routy, tak v db budeš mít pořád staré vygenerované odkazy

Zax
Člen | 370
+
0
-

Jak bylo napsáno výše – je lepší ukládat odkazy na akci než URL.

URL se dá přeložit na Nette formát třeba takto:

$request = $router->match(new Nette\Http\Request(new Nette\Http\UrlScript($link)));
$params = $request->getParameters();
$netteLink = ':' . $request->presenterName . ':' . $params['action'];