Zvýraznění aktivní položky v navigaci
- mrataja
- Člen | 57
Dělám víceméně statický web, kdy mám pouze Default presenter každou
jednotlivou stránku zobrazuji přes id
tzn. každá ze stránek má svou latte šablonu. Je tohle řešení ok, nebo se
to dá řešit lépe?
public function renderDefault($id) {
if (isset($id)) {
$this->setView($id);
}
}
Co mě ovšem pálí je, že jedna ze stránek obsahuje odkazy na jiné
stránky a já na těchto jiných stránkách nedokážu označit v navigaci
aktivní prvek. No, težko se to popisuje tak zkusím příklad:
Služby -
– prani
– zehleni
..
Kdyz jsem na stránce Služby tak přes ifCurrent označím v navigaci služby. Ale pokud jsem na stránce praní, chci aby byly Služby rovněž aktivní. Submenu v tomto případě nepoužívám.
- mrataja
- Člen | 57
Tabetha napsal(a):
tak ak máš pre každú stránku inú šablónu tak si to ručne nastaviť aj na tie služby… či nie?
Vím jak to myslíš, ale menu generuji v layout.latte tzn. ve společné šabloně. Presenter:
$this->template->menuItemsTop = array(
array('url' => 'Homepage:default', 'id' => null, 'title' => 'úvod'),
array('url' => 'Homepage:default', 'id' => 'o-mne', 'title' => 'o mně'),
array('url' => 'Homepage:default', 'id' => 'sluzby', 'title' => 'služby'),
array('url' => 'Novinky:default', 'id' => null, 'title' => 'tipy'),
array('url' => 'Homepage:default', 'id' => 'cenik', 'title' => 'ceník'),
array('url' => 'Homepage:default', 'id' => 'kontakt', 'title' => 'kontakt'),
);
- hAssassin
- Člen | 293
a co si to menu pojmenovat (udelat z neho asoc slovnik, kde klicem bude cokoliv unikatniho) a pridat do dej jeste polozku ‚active‘ a tu pak v jednotlivych render metodach nastavovat na true. Jen bys musel vymyslet nejaky unikatni klic aby si to mohl generovat, idealne nejaka slozenina z presenter:action:id.
$this->template->menuItemsTop = array(
'Homepage:default:' => array('url' => 'Homepage:default', 'id' => null, 'title' => 'úvod', 'active' => false),
'Homepage:default:o-mne' => array('url' => 'Homepage:default', 'id' => 'o-mne', 'title' => 'o mně', 'active' => false),
'Homepage:default:sluzby' => array('url' => 'Homepage:default', 'id' => 'sluzby', 'title' => 'služby', 'active' => false),
'Novinky:default:' => array('url' => 'Novinky:default', 'id' => null, 'title' => 'tipy', 'active' => false),
'Homepage:default:cenik' => array('url' => 'Homepage:default', 'id' => 'cenik', 'title' => 'ceník', 'active' => false),
'Homepage:default:kontakt' => array('url' => 'Homepage:default', 'id' => 'kontakt', 'title' => 'kontakt', 'active' => false),
);
No a potom upravit tu render metodu na:
public function renderDefault($id) {
if (isset($id)) {
$this->setView($id);
$this->template->menuItemsTop[$this->name .':'. $id]['active'] = true;
}
}
A nakonec opravit sablonu tak aby
n:class="($item['active']) ? active"
, ale to uz je
asi jasny…
- mrataja
- Člen | 57
enumag napsal(a):
- Měnit view v render* metodě je blbost. Vůbec nepotřebuješ všude používat Homepage:default, použij rovnou Homepage:about etc. (budeš potřebovat tohle)
- Služby mají mít samostatný presenter, pak ti pomůže isLinkCurrent(‚Sluzby:*‘)
Tak jsem nakonec pro kategorii Sluzby vytvoril novy presenter. Diky za radu.