Menu – jak na to správně v nette

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

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
+
0
-

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
+
0
-

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)