Ziskani jmena aktualniho modulu
- Ajax
- Člen | 59
navazuji na toto toto vlakno.
Mam komponentu, ve ktere chci vykreslovat menu podle toho, jaky modul bude
aktualni. Existuje nejaka snadna cesta ke jmenu modulu? Pokud pouziju
$this->getName()
, dostanu jen jmeno tridy pro komponentu.
Vlastne se cely den trapim s tim, jak vyresit menu podle modulu a jak resit komponenty. Nette by potrebovalo fakt lepsi dokumentaci. :(
Editoval Ajax (25. 4. 2011 22:18)
- nanuqcz
- Člen | 822
Ahoj, nemám teď možnost to vyzkoušet, ale napadá mě toto:
V komponentě by mělo jít (podle api) napsat tohle:
$name = $this->getPresenter()->getName(); //získám Module:Presenter
$module = preg_replace("#:?[a-zA-Z_0-9]+$#", "", $name); //odstranění ":Presenter" z názvu
Snad jsem tam neudělal nějakou chybku.
- Ajax
- Člen | 59
Diky moc! Funguje to.. :)
Muzu mit doplnujici dotaz, i kdyz mimo nazev? Kde je vhodne plnit komponentu daty? Kdy mam naplnit promennou v sablone, kdyz pracuji s komponentou? V tride komponenty? V presenteru? V tovarnicce? Pro me by bylo nejlepsi v presenteru, ale tam mi to hlasi chybu (Notice: promenna neexistuje)
Editoval Ajax (26. 4. 2011 7:36)
- nanuqcz
- Člen | 822
Ajax napsal(a):
Kde je vhodne plnit komponentu daty? Kdy mam naplnit promennou v sablone, kdyz pracuji s komponentou? V tride komponenty? V presenteru? V tovarnicce?
To, si myslím, je případ od případu. Já většinou plním data ve třídě komponenty, ale třeba formuláře plním v presenteru, protože jinde to u formulářů prostě nejde :-) Komponenta by měla být od zbytku aplikace co nejvíc oddělená (kvůli znovupoužitelnosti), takže já bych to viděl takhle:
- Pokud to jde, nebo pokud to není vyloženě nelogické, plnit ve třídě komponenty
- Pokud ne, plnit v továrničce (např u formulářů vnořené selecty na jinou tabulku typu "Tento článek přiřadit ke kategorii: " – kategorie bych načítal v továrničce)
- Pokud nejde 1. ani 2., tak v presenteru.
V původním vlákně píšeš, že máš komponentu na vypisování menu. Tu bych asi plnil přímo v její třídě.
Editoval xxxObiWan (26. 4. 2011 11:17)
- Aurielle
- Člen | 1281
matata napsal(a):
V tom navazujícim vlákně se bavili o explode, který bude rychlejší než regulární výraz.
<?php list($module) = explode(':', $this->getPresenter()->getName()); ?>
PS: odzkoušeno
explode → 14ms
regular → 20ms
Tohle řešení není 100%, bere jen část do první dvojtečky. Taky můžeš mít víc zanořených modulů, což pokud vidím dobře ten regulár řeší.