Hlubší struktura menu
- Ondřej Brejla
- Člen | 746
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
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
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í :)
- David Grudl
- Nette Core | 8218
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
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
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 | 8218
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
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 :)