ifCurrent ve vlastní komponentě
- ondrej256
- Člen | 187
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
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
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
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'];