Získání aktuální routy pro identifikaci

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

Řeším teď tvorbu extension pro menu protože ty stávající tři či kolik jich je co jsou v addons mě moc nevyhovují ;)

Aktuálně dělám filtr pro určení která položka je aktivní a která ne a narazil jsem na rozhodnutí zda to určovat tak že:

  1. Vezme se routa která je definována pro položku, vygeneruje se url a optá se presenteru zda je vygenerovaný link aktuální
  2. Vezme se routa která je definována položkou a pomocí reguláru se porovná s routou aktuálního requestu

Co je výhodnější? Ve skutečnosti se nepoužije pro určení routa položky ale je tam ještě další hodnota pro tento případ, aby bylo možné udělat aktivní menu napříč vícero akcemi atd.

Teď to ve filtru řeším jako v 1, ale mě osobně připadá lepší to řešit jako v 2 ale to bych se musel dostat buď k routě a nebo vygenerované url aktuálního requestu.

PS: doufám že se neobjevím na Filipově twitteru jako debilní dotaz ;)

Editoval akadlec (27. 8. 2014 9:48)

akadlec
Člen | 1326
+
+1
-

fuuu nikdo nic? tak pojďme třeba udělat anketu ;)

petr.jirous
Člen | 128
+
0
-

Pokud tě dobře chápu, tak to, co potřebuješ, je makro {ifCurrent }

David Matějka
Moderator | 6445
+
0
-

na routy se vykasli. Porovnavej aplikacni requesty. K tomu slouzi prave to makro ifCurrent, resp.
metoda isLinkCurrent

ale pozor na problemy

akadlec
Člen | 1326
+
0
-

@petr.jirous tak makro určitě nepotřebuju, to se jaksi nehodí použít ve službě, objektu.

@matej21 mno isLinkCurrent se dá, ale tady zas narážím na problém v tom že pokud chci položku povolit aktivní pro více variant, budu muset takto zkontrolovat více hodnot což se mi moc nelíbí.

David Matějka
Moderator | 6445
+
0
-

@akadlec no to budes muset resit i jinde ne? navic u isLinkCurrent neni presna kontrola, ale pouze kontrola proti predanym parametrum. a akci nemusis specifikovat, staci Presenter:* (nebo tak nejak)

akadlec
Člen | 1326
+
0
-

Takhle, chtěl bych abych mohl např. pomocí jednoho reguláru udělat kontrolu zda je to povolené nebo ne.

Takhle by to šlo kdybych porovnával adresu requestu:

#^system/(system|settings|dashboard).*$#

ale asi by bylo více vhodné aby to porovnalo pomocí routy třeba nějak takto:

#^System:Admin:(Default|Settings|Dashboard).*$#

a do preg_match bych předal aktuální routu co se načetla. Jednoduše nechtěl bych mít v té definici nějaké pole pokud bych chtěl přesně vyjmenovat pro které routy by to mělo platit.

Nebo jdu špatným směrem?