Zvýraznění aktivní položky v navigaci

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

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.

Tabetha
Člen | 140
+
0
-

tak ak máš pre každú stránku inú šablónu tak si to ručne nastaviť aj na tie služby… či nie?

mrataja
Člen | 57
+
0
-

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'),
        );
Tabetha
Člen | 140
+
0
-

to menu vyzerá nejako takto?

  • Uvod
  • O mne
  • Sluzby
    • zehleni
    • prani
  • Tipy
hAssassin
Člen | 293
+
0
-

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…

enumag
Člen | 2118
+
0
-
  1. 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)
  2. Služby mají mít samostatný presenter, pak ti pomůže isLinkCurrent(‚Sluzby:*‘)
mrataja
Člen | 57
+
0
-

enumag napsal(a):

  1. 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)
  2. 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.