Dvě nezávislé menu na jedné stránce
- milde
- Člen | 52
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
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
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
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 makrolink
) odkazuješ na další části aplikace. Pokud je chceš načítat z databáze (ty menu) tak si do BasePresenteru dáš metoduBeforeRender
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
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
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.
- milde
- Člen | 52
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)
- Ot@s
- Backer | 476
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
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.