Menu – jak na to správně v nette
- lvq
- Člen | 47
Ahoj,
mám takovou celkem stupidní otázku:
Jaká je správná cesta v nette na vytvoření menu, které se nachází
v šabloně @layout a které se načítá z databáze.
Můžu si do databáze sáhnout přímo z šablony, což se mně nelíbí nebo
si můžu vytvořit komponentu, což bych taky nerad. Ideálně bych do šablony
rád dostal pole, které by obsahovalo kompletní strukturu menu, ale nevím jak
to zapsat tak, abych nemusel v každém presenteru v render metode psát
něco jako:
$this->template->menu = $this->menu_model->vrat_menu();
Předem díky za Vaše tipy.(nette 2 beta, php 5.2)
- na1k
- Člen | 288
Správná cesta může být komponenta. V případě že máš na stránce pouze jediné menu bych se ale nebál předat data šabloně tak, jak píšeš (komponenta by byla asi zbytečná).
Abys toto nemusel nastavovat v každé render metodě, stačí to dát do
beforeRender
basePresenter
-u – za předpokladu že
basePresenter
máš. Pokud ne, určitě si jej vytvoř jako předka
všech ostatních presenterů, bude se hodit i později. … To už se ale moc
rozepisuju, doporučuju nastudovat dokumentaci, zejména životní cyklus
presenteru.
Co se struktury menu týče, můžu doporučit topic ohledně traverzování kde jsou i konkrétní šablony ;-)
- Filip111
- Člen | 244
Já bych to s traverzováním zbytečně nekomplikoval – rekurzivně si
načtu menu a uložim do cache. Jestli je tam o pár SQL dotazů víc nebo
míň mě netrápí, cache se může invalidovat jen při změně menu
v administraci a to určitě neni tak často aby to někoho pálilo.
Samozřejmě jsou situace, kdy už se to nedá tak lehce odbýt.
Editoval Filip111 (25. 8. 2011 10:50)