Navrh modularni aplikace – spolecny @layout

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

Ahoj vsem!

Potrebuju nakopnout, poradit. Potrebuju napsat modularni system (v budoucnu by mel byt vycet modulu na ruznych serverech ruzny podle potreb dane instance), ktery bude mit spolecne jadro (autentizace a autorizace, vzhled, zakladni funkce). Par dnu jsem se prodiral trema (pro me) novinkama najednou (MVC, nette, OOP) a dohnalo me to do situace, kdy se bojim neco zacit. :) Ne, vazne, potrebuju nejakou obecnou radu jak si usporadat slozky, presentery, layouty,.. Nejaka doporuceni?

Prvni vec, na kterou jsem narazil. Je mozne mit jeden layout a par presenteru a modelu spolecne pro vsechny moduy? Jak potom nastavit routy, adresarovou strukturu a tak..

PS: Napsal jsem toho uz hodne, ale bez OOP, frameworku a MVC. :) Proto nechci udeat hned na zacatku spatny krok a ptam se na radu. Dik vsem..

Editoval Ajax (20. 3. 2011 22:07)

Felix
Nette Core | 1245
+
0
-

Zkusil bych tenhle navod ;-)

Ajax
Člen | 59
+
0
-

Ale neee… Ten jsem uz delal. A mnoho dalsich.. :)

Takze zadny tip? Jak udelat jeden spolecny „modul“ pro vsechny? Spolecny layout? Zadne jine zlate rady?

22
Člen | 1478
+
0
-

a co je v tom za problém? Společný šablony a presentery necháš v rootu a přes dědičnost šablon

{extends '../@someLayout.latte'}

si ho načteš…třeba

Editoval 22 (21. 3. 2011 9:27)

Podbor
Člen | 19
+
0
-

Já bych k tomuto tématu s dovolením připojil svou otázku. S Nette začínám a zatím jsem nikde nenašel, jak udělat to, aby nějaká šablona (např. Login/default.latte) nedědila, nebo se nevkládala do defaultní šablony "@layout.latte", ve které mám základní kostru stránky, dynamicky natahané menu z databáze atp. Chtěl bych zkrátka, aby ta šablona login vypadala úplně jinak než zbytek stránek, které budou dostupné po přihlášení.
Používám Nette 2.0 pro PHP 5.3.

Jan Tvrdík
Nette guru | 2595
+
0
-

Dej do šablony {layout none} nebo nastav v presenteru $this->layout = FALSE.

Droid
Člen | 92
+
0
-

Podbor napsal(a):

Já bych k tomuto tématu s dovolením připojil svou otázku. S Nette začínám a zatím jsem nikde nenašel, jak udělat to, aby nějaká šablona (např. Login/default.latte) nedědila, nebo se nevkládala do defaultní šablony "@layout.latte", ve které mám základní kostru stránky, dynamicky natahané menu z databáze atp. Chtěl bych zkrátka, aby ta šablona login vypadala úplně jinak než zbytek stránek, které budou dostupné po přihlášení.
Používám Nette 2.0 pro PHP 5.3.

Já login page řešil tak, že jsem vše naházel do Login/default.latte – prostě žádná dědičnost. Lepší řešení bude vytvořit @layout2.latte s blokem třeba #login a pak ten blok definovat v Login/default.latte..Každopádně lepší řešení také uvítám :-)

EDIT: Srigiho řešení

Editoval Droid (21. 3. 2011 17:01)

Ajax
Člen | 59
+
0
-

22 napsal(a):

a co je v tom za problém? Společný šablony a presentery necháš v rootu a přes dědičnost šablon

{extends '../@someLayout.latte'}

si ho načteš…třeba

No dobra, rekneme, ze to chapu. Ale co s routama? Narazil jsem treba na problem, ze potrebuju mit v app/AdminModule/templates/login.latte odkaz na prezeneter app/presenters/SomePresenter.php. Pokud tam dam obycejne {link SomePresenter:default} tak mi tam nette pridava automaticky aktualni modul. Coz nechci a spolecne veci nemaji modul (jsou v root). Co jsem nepochytil?

Jan Tvrdík
Nette guru | 2595
+
0
-

Odkaz můžeš napsat absolutně (https://doc.nette.org/…ified-action), tj. {link :SomePresenter:default}.

Ajax
Člen | 59
+
0
-

Jezis to je genialne jednoduche. A ja v tom hledal slozitosti. Dik moc za pomoc..

Ajax
Člen | 59
+
0
-

Ahoj vsem, mam dalsi dotaz. Potrebuju rict, jestli se vydavam spravne a pripadne se dotazat na dalsi postup. Cela aplikace ma jeden layout, ve kterm je (mimo jine) topmenu. Kazdy modul ma sve submenu (menu patrici jen k modulu) v default presenteru a sablone (?? dobre ??). A kazdy modul ma dalsi presentery na obsluhu submenu, napriklad modul admin ma presenter Users pro pridavani a editaci uzivatelu (jedna polozka v menu) (?? dobre ??). A pokud je tento koncept spravne, jak zaridit aby se mi stranka poskladala z @layout (topmenu), modul:deafult (submenu – to funguje) a modul:presenter:akce – toto uz mi nejde, vlozi se jen vysledek akce, a ja potrebuju default preseneter (submenu) + vysledek akce. Je spatne koncept, nebo me znalosti nette?

srigi
Nette Blogger | 558
+
0
-

Takto to nefunguje. Jeden request nemozu obsluhovat dva moduly. To co hladas su vykreslitelne komponenty. Tie uz sa takto spravat vedia. Dokonca kazda komponenta je zaroven kontainerom dalsich komponent.

Spravis si teda komponentu mainmenu a aktualny presenter do nej nahadze polozky submenu. Nasledne napises nejaku logiku, ktora komponentu rekurzivne vykresli.

Podbor
Člen | 19
+
0
-

Jan Tvrdík napsal(a):

Dej do šablony {layout none} nebo nastav v presenteru $this->layout = FALSE.

Díky za chvatnou radu, tohle je pro mou potřebu naprosto dostačující. :-)