Dvě nezávislé menu na jedné stránce

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

Zdravím, rád bych Vás požádal o návod jak udělat dvě nezavislá menu na jedné stránce – začínám s Nette a i když jsem prošel snad všechny diskuse, tak jsem na nic nenarazil. Stačí jen hrubý návod jak na to. Jedna se mi o to, že chci mít na stránce horizontální menu a v jine části stránky menu vertikalní. To horizontální mám definované pomocí BasePresenteru ale s tím vertikálním si nevím rady. Díky za každý typ.

Darkry
Člen | 101
+
0
-

Trošku nechápu tvůj problém. V šabloně @layout.latte si uděláš dvě menu, ve kterých pomocí n:href (pokud nemáš nejnovější verzi tak makro link) odkazuješ na další části aplikace. Pokud je chceš načítat z databáze (ty menu) tak si do BasePresenteru dáš metodu BeforeRender a v ní je načteš z db a pak předáš pole do šablony třeba takto:

$this->template->menu1 = $vysledekzdb1;
$this->template->menu2 = $vysledekzdb2;
nanuqcz
Člen | 822
+
0
-

Ahoj, záleží co od těch dvou menu očekáváš. Můžeš si na obě menu udělat komponentu a pak je v šabloně volat např. jako {control horizontalMenu} a {control verticalMenu}. Nebo si můžeš udělat jednu univerzální komponentu pro menu, a jen ji pak parametrem říct, které menu chceš zobrazit: {control menu, type => 'vertical'}. Nebo pokud to menu bude pořád stejné, nic ti nebrání ho napsat natvrdo do šablony.

Asi se musíš rozepsat podrobněji. Když už jsi zvládl udělat horizontální menu, co ti brání v tom, udělat stejným způsobem vertikální?

milde
Člen | 52
+
0
-

Darkry napsal(a):

Trošku nechápu tvůj problém. V šabloně @layout.latte si uděláš dvě menu, ve kterých pomocí n:href (pokud nemáš nejnovější verzi tak makro link) odkazuješ na další části aplikace. Pokud je chceš načítat z databáze (ty menu) tak si do BasePresenteru dáš metodu BeforeRender a v ní je načteš z db a pak předáš pole do šablony třeba takto:

$this->template->menu1 = $vysledekzdb1;
$this->template->menu2 = $vysledekzdb2;

Předem bych rád poděkoval za rychlou odpověď. Menu nenačítám z db – jedná se o statická menu. V BasePresenteru mam definované pole horizontalního menu:

<?php
	public function beforeRender(){
$this ->  template -> menuItems = array('domu'=>'default', ..... );
}
?>

a v layout.latte

<ul n:inner-foreach=„$menuItems as $item ⇒ $link“>
<li ><a n:href=„$link“>{$item}</a></li>
</ul>

to mi vytvoří horizontální menu. A teď nevím, jak to udělat tak abych někde jinde na stejne stránce měl i vertikální menu. Rád bych to udělal nějak podobně – tedy pokud to jde.

nanuqcz
Člen | 822
+
0
-

Třeba takhle (způsobů je více, je na tobě jaká struktura dat se ti v šabloně bude líbit)

v BasePresenteru

public function beforeRender(){
        $this->template->horizontalMenu->items = array('domu'=>'default', ..... );
}

kdekoli

public function beforeRender(){
        $this->template->verticalMenu->items = array('Smazat'=>'delete!', ..... );
}

EDIT: a v šabloné to pak vypíšeš třeba takhle:

<ul n:if="isset($verticalMenu)" n:inner-foreach=„$verticalMenu->items as $item ⇒ $link“>
  <li ><a n:href=„$link“>{$item}</a></li>
</ul>

Editoval xxxObiWan (2. 8. 2011 11:40)

milde
Člen | 52
+
0
-

xxxObiWan napsal(a):

Třeba takhle (způsobů je více, je na tobě jaká struktura dat se ti v šabloně bude líbit)

v BasePresenteru

public function beforeRender(){
        $this->template->horizontalMenu->items = array('domu'=>'default', ..... );
}

kdekoli

public function beforeRender(){
        $this->template->verticalMenu->items = array('Smazat'=>'delete!', ..... );
}

EDIT: a v šabloné to pak vypíšeš třeba takhle:

<ul n:if="isset($verticalMenu)" n:inner-foreach=„$verticalMenu->items as $item ⇒ $link“>
  <li ><a n:href=„$link“>{$item}</a></li>
</ul>

tak jsem vyzkoušel tvůj návod, ale hlasí mi to chybu: The variable ‚verticalMenu‘ does not exist in template. tak nevím,, kde dělám chybu.

nanuqcz
Člen | 822
+
0
-

The variable ‚verticalMenu‘ does not exist in template

ukaž kód, kde tu proměnnou verticalMenu plníš (v jaké presenteru a v jaké metodě, jak to plnění vypadá)

milde
Člen | 52
+
0
-

xxxObiWan napsal(a):

The variable ‚verticalMenu‘ does not exist in template

ukaž kód, kde tu proměnnou verticalMenu plníš (v jaké presenteru a v jaké metodě, jak to plnění vypadá)

Asi jsem lama. Hraju si s tím abych pochopil nette – nikdy jsem s frameworkem nedelal. Původní kód na horizontalní menu jsem psal výše a asi jsem ne zcela pochopil tvou ukázku:

<?php
public function beforeRender(){
        $this->template->horizontalMenu->items = array('domu'=>'default', ..... );
}
?>

Když jsem si zkoušel udělat to horizontální menu, tak jsem nikde, alespoň ne vědomě, neplnil proměnnou menuItems.

Editoval milde (2. 8. 2011 17:12)

milde
Člen | 52
+
0
-

Nevite si prosim nekdo s tim rady? Uy se s tim peru 2 dny a stale nemohu na to prijit – jsem proste lama. Diky za rady.

EDIT: Tak cely problem je vyresen…

Editoval milde (4. 8. 2011 10:50)

Ot@s
Backer | 476
+
0
-

milde napsal(a):

The variable ‚verticalMenu‘ does not exist in template

Pridej si obsah pro verticalMenu:

public function beforeRender(){
        $this->template->horizontalMenu->items = array('domu'=>'default', ..... );
        $this->template->verticalMenu->items = array('jinam'=>'jinam', ..... );
}
milde
Člen | 52
+
0
-

Ot@s napsal(a):

milde napsal(a):

The variable ‚verticalMenu‘ does not exist in template

Pridej si obsah pro verticalMenu:

public function beforeRender(){
        $this->template->horizontalMenu->items = array('domu'=>'default', ..... );
        $this->template->verticalMenu->items = array('jinam'=>'jinam', ..... );
}

Diky za radu. Uz me to rovnez napadlo, ale i presto diky … je videt, ze tu zacatecnickou lamu, jako jsem ja, nenechaji na holickach.