LATTE – Lze nějak rozlišit akci presenteru s a bez parametru?

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

Mám jednu akci v presenteru pro výpis produktů, ve výchozím stavu zobrazí všechny produkty, po zadání parametru zobrazí produkty z dané kategorie. A já chci v layoutlatte rozlišit, kdy je tam parametr a kdy ne, abych mohl zvýraznit v menu položku produkty(bez parametru) a kategorie(s parametrem)

Nyní se ptám v latte:

<?php
<li n:class="$presenter->isLinkCurrent('Products:default')">
?>

Ale nedokáži v tomto zápisu rozpoznat, pokud je zadán nějaký parametr.

Jan Mikeš
Člen | 771
+
0
-

Metoda isLinkCurrent() přijímá v druhém parametru array :-)
https://api.nette.org/…mponent.html#…

Editoval Lexi (9. 4. 2015 18:35)

duke
Člen | 650
+
+1
-

Pokud jde o první parametr akce, mělo by fungovat např.:

<li n:class="$presenter->isLinkCurrent('Products:default', $parameterValue) ? current">

Pro nepřítomný parametr by mělo fungovat NULL.

Pokud by toto nefungovalo, můžeš vždy použít $presenter->getParameter('foo').

Šlo by to také řešit pomocí routeru, kde bys podle přítomnosti toho parametru měnil název akce a pak by sis vystačil s isLinkCurrent('Products:default') a např. isLinkCurrent('Products:detail').

James07
Člen | 41
+
0
-

Pomocí NULL jsem si zadal, že se mi jako aktivní má označit, pokud není parametr. Ale jak zavolat opak NULL, tzn. že je zadán parametr, a !NULL nefunguje.
Nakonec zachránilo getParametr. Děkuji.

Editoval James07 (9. 4. 2015 18:53)

James07
Člen | 41
+
0
-

Přesně na to jsem se díval, ale pochopil jsem z tvé odpovědi to, že bych jako ten 2. parametr předal pole id všech kategorií, které mám (to se mi nelíbí) + když jsem předal pole id všech kategorií, tak mi nette vyhodilo chybu, že daná akce očekává pouze 1 parametr a víc ne.

duke
Člen | 650
+
0
-

Nejde o pole všech přípustných hodnot, ale o pole všech parametrů. Ve tvém případě pole s jedním parametrem (id produktu). Tzn. můžeš pro konkrétní id produktu napsat něco jako:

$presenter->isLinkCurrent('Products:default', ['productId' => $productId]);

… což lze za předpokladu, že productId je prvním parametrem akce Default, zkráceně zapsat také takto:

$presenter->isLinkCurrent('Products:default', $productId);

Kritérium, o které jde tobě (productId !== NULL), do metody isLinkCurrent nedostaneš a je třeba to vyřešit jinak (např. jak jsi již patrně učinil přes $presenter->getParameter('productId') !== NULL).