Hlubší struktura menu

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

Zdravim. Mám takový problémek…dá se v šabloně nějakým způsobem zjistit jméno presentera, který je předkem aktuálního? Myslím něco jako parent::getName()…každopádně to nefunguje. Potřebuju to pro detekci zanoření ve víceúrovňovém menu. Příklad je takovýto:

první vrstva menu: neco | neco | Ucetnictvi |neco | neco

druha vrstva (vybrana polozka Ucetnictvi): Vypis plrateb | Vlozit platbu | Fakturace | Ucet

Ucetnictvi je abstraktní presenter Accounting.
Vypis plateb a Vlozit platbu jsou akce presenteru Payments, který je potomek Accounting.
Fakturace a Ucet jsou akce presenteru Invoices, který je potomek Accounting.

Tzn. v šabloně potřebuju mít označené položky menu Ucetnictvi a Fakturace (například).

A já potřebuju, abych mohl třeba v šabloně Invoices.show.phtml použít něco jako $presenter->getParentName(); Za boha nemůžu přijít na to jak to udělat…(v getName() je imho totiž opravdu jen jméno aktuálního použitého presenteru, ikdyž nějakým způsobem v Invoices volám parent::getName()).

Máte nějaké zkušenosti? :-)
Díky.

Editoval Warden (11. 2. 2009 9:47)

Jod
Člen | 701
+
0
-

Rodiča zistíš cez get_parent_class() . A rodiča overíš cez is_subclass_of() . Keď to chceš OOP tak cez reflection objekt ReflectionClass::getParentClass() .
Potom to meno classy preženieš myslím cez neakú metódu v PresenterLoader a malo by to vrátiť meno presentera.

Editoval Jod (11. 2. 2009 10:52)

Ondřej Brejla
Člen | 746
+
0
-

To je právě dost zbytečné zesložitění…teď to na rychlo řeším přes instanceof, což sice pěkně funguje, ale nepřijde mi to moc pěké řešení…stejně jako to tvoje. Spíš bych čekal něco více „nettáckého“ :) Jinak řečeno, bych se rád vyhnul používání těchto low fcí. Proto mě zajímá, jestli jste to někdo řešil, nějak hezky :) Pokud ne, tak to samo vyřešim svojí metodou, kterou třeba plácnu do BasePresenteru… Ale třeba máte někdo hezčí řešení :)

Jod
Člen | 701
+
0
-

Hodilo by sa to ako feature request Davidovi. Myslím že to nebude až taký problém pridať metódu Presenter::getParentName(), možno aj s parametrom zanorenia.

Ondřej Brejla
Člen | 746
+
0
-

Jj já to tam napíšu :)

Jod
Člen | 701
+
0
-

No ale presenter je len extended od toho rodičovského, ktorý sa v strome nenachádza, je len dedený.

David Grudl
Nette Core | 8166
+
0
-

Pro Presenter::getParentName() nevidím využití. Není obvyklé, aby vyšší položka v hierarchii menu byla představována rodičovským presenterem. Naopak bych spíš doporučil jako presentery používat jen listy.

Ondřej Brejla
Člen | 746
+
0
-

Tak to právě mám…final listy jsou Invoices a Payments…které patří pod „větev“ Accounting…jež je abstraktní. Mohl bych všechny akce z Invoices a Payments nacpat do Accounting a neřešit to, ale logické rozložení je spíš takové jaké mám já. Navíc nechci mít zbytečně hromadu akcí u jednoho Presenteru. Můj problém tedy je, jak z „listu“ programově zjistit „větev“ na které visím…a podle této větve přípdně porovnávat „aktivnost“ položky v nadřazeném menu…nepřijde mi to jako nesmysl…

Vám jo? A dyžtak proč? Díky.

Ondrej
Člen | 110
+
0
-

Warden napsal(a):
Máte nějaké zkušenosti? :-)
Díky.

Ja menu resim tak, ze Menu mam jako Control. BasePresenter v metode startup prida prvni vrstu menu. AccountingPresenter prida submenu a zaroven oznaci polozku Ucetnicti z prvni urovne jako aktivni. Koncovy InvoicePresenter zase aktivuje submenu Faktury. Neco resim az na urovni action, kde potrebuji zvyraznit submenu podle akce/view.

David Grudl
Nette Core | 8166
+
0
-

Warden napsal(a):

Tak to právě mám…final listy jsou Invoices a Payments…které patří pod „větev“ Accounting…jež je abstraktní. Mohl bych všechny akce z Invoices a Payments nacpat do Accounting a neřešit to, ale logické rozložení je spíš takové jaké mám já. Navíc nechci mít zbytečně hromadu akcí u jednoho Presenteru. Můj problém tedy je, jak z „listu“ programově zjistit „větev“ na které visím…a podle této větve přípdně porovnávat „aktivnost“ položky v nadřazeném menu…nepřijde mi to jako nesmysl…

Vám jo? A dyžtak proč? Díky.

Souvislost mezi strukturou presenterů a strukturou menu je velmi volná, lépe řečeno často vůbec žádná. Pokud tedy vím, ve kterém listu menu jsem (list odkazuje na aktuální presenter:view), tak zároveň vím, ve které jsem i větvi (té jediné, která vede k listu).

Ondřej Brejla
Člen | 746
+
0
-

Ondrej napsal(a):

Ja menu resim tak, ze Menu mam jako Control. BasePresenter v metode startup prida prvni vrstu menu. AccountingPresenter prida submenu a zaroven oznaci polozku Ucetnicti z prvni urovne jako aktivni. Koncovy InvoicePresenter zase aktivuje submenu Faktury. Neco resim az na urovni action, kde potrebuji zvyraznit submenu podle akce/view.

Tohle už je zajímavější řešení, čekal jsem, že se s něčím podobným někdo objeví.

David Grudl napsal(a):

Souvislost mezi strukturou presenterů a strukturou menu je velmi volná, lépe řečeno často vůbec žádná. Pokud tedy vím, ve kterém listu menu jsem (list odkazuje na aktuální presenter:view), tak zároveň vím, ve které jsem i větvi (té jediné, která vede k listu).

To se souvislostí presenterů a strukturou menu je sice pravda, nicméně v mém případě mi to pomáhá všechny části aplikace od sebe logicky oddělit a strukturovat. Takhle hned vidim, co kde co řeší. Pokud budu mít X presenterů bez hlubší struktury, jen tak nějak prolinkované, tak se v tom za chvilku ztratim.

Co se týče „listu, který zná svou větev“ (jak překrásné :), tak jestli tě chápu dobře, tak říkáš, že při zjišťování aktivnosti hlavního menu mám stejně porovnávat hodnotu getAction(TRUE)…to sice můžu, ale když budu mít pod Accounting víc presenterů (teď mám 2), tak je všechny musim mít vypodmínkované…to nebude moc hezké. Jestli to teda dobře chápu…možná jsem jen nevyspalej :)

tom
Člen | 171
+
0
-

Nezverejnil by nekdo kod sve komponenty pro stromove menu? Predem diky

Jod
Člen | 701
+
0
-

Večer ti hodím môj TreeView control do Tipy a triky ak chceš.

Editoval Jod (19. 2. 2009 16:42)

tom
Člen | 171
+
0
-

Jod napsal(a):

Večer ti hodím môj TreeView control do Tipy a triky ak chceš.

OK super, to budu rad, muzu pak po odladeni nahodit ten svuj na kterem zrovna delam. Hodi se kazda inspirace :)

baki
Člen | 21
+
0
-

Jod napsal(a):

Večer ti hodím môj TreeView control do Tipy a triky ak chceš.

Cau, zrovna zkousim napsat svou prvni stranku v Nette a hodil by se mi zrojak nejakeho menu, ci tak. Hledal jsem TreeView control v Tipy a triky a nenasel jsem.