contao / core

Contao 3 → see contao/contao for Contao 4
GNU Lesser General Public License v3.0
495 stars 214 forks source link

Hard Limit => Hard Level des Navigationsmenü #1434

Closed tristanlins closed 12 years ago

tristanlins commented 12 years ago

Hi leo,

wir haben folgendes Problem in letzter Zeit öffters gehabt: Wir brauchen eine Navigation, die bis in die 2. Ebene runter geht, wenn man den zugehörigen Level-1-Menüpunktes öffnet. Aber es soll immer nur die 2. Ebene des +aktiven+ Level-1-Menüpunktes angezeigt werden, also müssen wir Stoplevel auf 1 setzen. Jetzt darf die 3. Ebene (wenn vorhanden) aber nicht mehr angezeigt werden, weil wir die dann z.B. an einer anderen Stelle oder garnicht anzeigen wollen. Momentan lösen wir das immer über das Template, in dem wir eine passende Bedingung einbauen:

<?php if ($this->level == 'level_1' || $this->level == 'level_2'): ?>
...
<?php endif; ?>

Auf Dauer aber unschön wie ich finde.

Unsere Idee ist jetzt, statt des Hard Limit einen Hard Level zu definieren:

Beste Grüße Tristan

--- Originally created on January 20th, 2010, at 11:13am (ID 1434)

Aybee commented 12 years ago

Soweit ich das sehen kann scheint das tatsächllich nicht mit Boardmitteln machbar zu sein. Am einfachsten wäre es wohl, wenn man im Feld Startlevel '1-2' eingeben könnte. Also Startlevel[-Endlevel]. Oder Levelrange.

--- Originally created on January 20th, 2010, at 11:27pm

leofeyer commented 12 years ago

Ich sehe hier gleich zwei Lösungen: Zum einen die Templateanpassung, die ihr ja schon vorgenommen habt. An dieser Lösung ist nichts auszusetzen, dafür gibt es ja mehrere Navigationstemplates. Alternativ könnte man mittels CSS alles ab der 3. Ebene ausblenden, wobei die Punkte dann im Quelltext noch verfügbar wären. Im Sinne der Barrierefreiheit könnte das aber eher noch als Vorteil gewertet werden (Screenreader können kein JavaScript).

--- Originally created on January 22nd, 2010, at 06:43pm

tristanlins commented 12 years ago

Stimmt, dass könnte mit CSS etwa so aussehen:

.mod_navigation ul.level_3 { display: none; }
.mod_navigation li.active ul.level_3, .mod_navigation li.trail ul.level_3 { display: block; }

Oder für mehrere Unterebenen unter der 3.

.mod_navigation ul.level_2 ul { display: none; }
.mod_navigation ul.level_2 > li.active > ul, .mod_navigation ul.level_2 > li.active > ul { display: block; }

(So als kleiner Hint.)

Was das mit JavaScript zu tun hat, versteh ich wohlgemerkt grad nur nicht, das wollen wir ja gar nicht einsetzen (bezüglich Barrierefreiheit).

Momentan ist es ja so, dass bei einem aktiven Menüpunkt nach dem Limit, der nächste Level darunter auch noch angezeigt wird (vorausgesetzt Hard Limit ist Off). Wir wollen ja nur, dass wir bestimmen können, wie viele Level nach dem Stoplevel angezeigt werden, bei aktiven Menüpunkten. Eine Hauseigene Lösung währe da schon cool. :-)


Um den ganzen ein bisschen mehr Substanz zu geben, hier die Konfiguration:
Modul Navigation:
- Startlevel: 0
- Stoplevel: 1
- Hard Limit: **off**

Im Template bauen wir dann ein:

<?php if ($this->level == 'level_1' || $this->level == 'level_2'): ?> ... <?php endif; ?>


Das bewirkt, dass wenn kein Punkt ausgewählt ist (man ist auf der Startseite), nur der Level 1 angezeigt wird. Wählt man einen Punkt aus dem ersten Level an, wird auch noch Level 2 (aber nur von dem aktiven Menüpunkt, nicht von den anderen). Da es hier aber keine Hauseigenen Lösung gibt, müssen wir jetzt im Template beschränken, dass der Level 3 und tiefere +nicht+ angezeigt werden, weil wir die an anderer Stelle angezeigt haben wollen.

--- _Originally created on January 23rd, 2010, at 01:25am_
leofeyer commented 12 years ago

--- Originally closed on May 25th, 2010, at 11:21am