Markierung des aktiven Menüpunktes
Markierung des aktiven Menüpunktes
Hallo zusammen!
Ich verwende begeistert S9y als CMS. Jetzt wäre es schön, jeweils die aktiven Menüpunkte im Hauptmenü, aber auch im Seitenmenü zu markieren (etwa mit einer anderen Farbe zu hinterlegen). Wie stelle ich so etwas am besten an?
Schon mal Danke!
Ich verwende begeistert S9y als CMS. Jetzt wäre es schön, jeweils die aktiven Menüpunkte im Hauptmenü, aber auch im Seitenmenü zu markieren (etwa mit einer anderen Farbe zu hinterlegen). Wie stelle ich so etwas am besten an?
Schon mal Danke!
Re: Markierung des aktiven Menüpunktes
Mit CSS.search1 wrote:Jetzt wäre es schön, jeweils die aktiven Menüpunkte im Hauptmenü, aber auch im Seitenmenü zu markieren (etwa mit einer anderen Farbe zu hinterlegen). Wie stelle ich so etwas am besten an?
Menüpunkte sind (normalerweise) Links, Links können über die CSS-Pseudoklassen :link, :active, :focus und :hover individuelle CSS-Anweisungen zugewiesen bekommen. Aber Vorsicht: Die Frage ist, was Du mit „aktive Menüpunkte“ genau meinst und welcher/n Pseudoklasse(e) dem evtl. zuzuordnen sind.
Zudem ist es in s9y ggf. möglich, die aktuell aufgerufene Seite, normalerweise über in der config.inc.php zugewiesene Variablen (meist: currpage, evtl. currpage2), zu erkennen und bei Übereinstimmung mit $serendipityBaseURL Menüpunkten spezielle CSS-Klassen (nicht Pseudoklassen!) oder eine id zuzuweisen.
Da bei Euch die Menüs meiner Erinnerung nach komplett hart kodiert sind, sollte die s9y-„Version“ auch im Submenü in der Seitenleiste machbar sein.
So, jetzt aber meine dumme Frage: Das ist doch bei Euch bereits so? (Wenngleich die Hervorhebung des aktiven Menüpunktes über style="..." ziemlich unschön ist.)
YL
Re: Markierung des aktiven Menüpunktes
Hallo yellowled,
danke für die Antwort!
Die CSS-Pseudoklassen sind meines Wissens nicht geeignet, den momentan angezeigten Menüpunkt zu markieren?
Die Idee mit dem Vergleich mit currpage klingt vielversprechend, nur leider gelingt es mir nicht
Hab in eingenes_Template/style.css folgendes Format definiert:
und in eigenes_Template/index.php
folgenden Link beim Hauptmenü gestaltet:
Dies führt aber zu keinem geänderten Ergebnis: Der Menüpunkt bleibt, wenn geöffnet, in der alten Hintergrundfarbe. Was mache ich falsch?
die eigenes_Template/index.php verweist auf eine mainnav.tpl, in der abgefragt wird: in dieser mainnav_start.tpl wird dann der style nur für die Startseite definiert. So benötigt jede Seite eine eigene php-Datei. Außerdem muss neben {if $view == 'start'} auch die {elseif $view == 'entry'}, {elseif $view == 'plugin'}, {elseif $faq_plugin.this_faq.category}, {elseif $faq_plugin.subcategories} und {elseif $view == 'categories'} für alle Seiten abgefragt werden, was die Sache bei einer Änderung ziemlich verkompliziert.
Da würde mir doch die eine Lösung mit currpage deutlich besser gefallen...
danke für die Antwort!
Die CSS-Pseudoklassen sind meines Wissens nicht geeignet, den momentan angezeigten Menüpunkt zu markieren?
Die Idee mit dem Vergleich mit currpage klingt vielversprechend, nur leider gelingt es mir nicht
Hab in eingenes_Template/style.css folgendes Format definiert:
Code: Select all
.hinterlegt {
color:#184E8B;
background-color:#ffffff;
}folgenden Link beim Hauptmenü gestaltet:
Code: Select all
<li><a {if $currpage == $serendipityBaseURL}class="hinterlegt" {/if}href="{$serendipityBaseURL}">Start</a></li>Bei uns ist nur das obere Hauptmenü bereits hinterlegt, aber so umständlich, dass dies kein Weg für das Seitenmenü darstellt:So, jetzt aber meine dumme Frage: Das ist doch bei Euch bereits so? (Wenngleich die Hervorhebung des aktiven Menüpunktes über style="..." ziemlich unschön ist.)
die eigenes_Template/index.php verweist auf eine mainnav.tpl, in der abgefragt wird:
Code: Select all
{if $view == 'start'}
{include file="mainnav_start.tpl"}Da würde mir doch die eine Lösung mit currpage deutlich besser gefallen...
Re: Markierung des aktiven Menüpunktes
Nein. Mit diesen Pseudoklassen kann man noch nicht besuchte (:link), bereits besuchte (:visited), mit der Tastatur fokussierte (:focus), mit der Maus überfahrene (:hover) sowie gerade angeklickte (:active) Links (genauer: Elemente, denn in modernen Browsern kann man diese Pseudoklassen durchauch auch auf andere HTML-Elemente anwenden) gestalten.search1 wrote:Die CSS-Pseudoklassen sind meines Wissens nicht geeignet, den momentan angezeigten Menüpunkt zu markieren?
Ich weiss, :active hört sich an, als sei es das, was Du suchst -- ist es aber nicht.
Zunächst mal funktioniert das so ohnehin nur für genau eine Seite.search1 wrote:und in eigenes_Template/index.php
folgenden Link beim Hauptmenü gestaltet:Dies führt aber zu keinem geänderten Ergebnis: Der Menüpunkt bleibt, wenn geöffnet, in der alten Hintergrundfarbe. Was mache ich falsch?Code: Select all
<li><a {if $currpage == $serendipityBaseURL}class="hinterlegt" {/if}href="{$serendipityBaseURL}">Start</a></li>
Darüber hinaus haben wir hier das Problem, dass in diesem Fall die gesamte Navigation hart kodiert ist. Die $currpage-Technik funktioniert z.B. im Bulletproof-Template so, dass die URLs, auf welche der jeweilige Link verweist, in einer Variablen abgelegt wird, welche dann mit $currpage und $currpage2 verglichen werden kann.
In Eurem Fall mussten diese URLs jedoch aufgrund der gewünschten Menüstruktur hart einkodiert werden, d.h. es gibt keine Variable, mit der man $currpage(2) vergleichen könnte -- außer eben den paar wenigen, die s9y bereitstellt, die aber nur die wenigsten Seiten abdecken.
Davon abgesehen müsste man den CSS-Selektor auch anders gestalten, aber die Frage stellt sich so noch gar nicht. Es müsste #navi a.hinterlegt sein, damit die Kaskade korrekt funktioniert, aber wie gesagt: Zunächst müsste man einen Weg finden, diese Klasse überhaupt korrekt zuzuweisen.
Ganz generell muss ich mir mal genauer ansehen, wie es mittlerweile funktioniert, Du hast ja doch zwischenzeitlich einiges umgebaut.
Ah, ich erinnere michsearch1 wrote:die eigenes_Template/index.php verweist auf eine mainnav.tpl, in der abgefragt wird:in dieser mainnav_start.tpl wird dann der style nur für die Startseite definiert. So benötigt jede Seite eine eigene php-Datei. Außerdem muss neben {if $view == 'start'} auch die {elseif $view == 'entry'}, {elseif $view == 'plugin'}, {elseif $faq_plugin.this_faq.category}, {elseif $faq_plugin.subcategories} und {elseif $view == 'categories'} für alle Seiten abgefragt werden, was die Sache bei einer Änderung ziemlich verkompliziert.Code: Select all
{if $view == 'start'} {include file="mainnav_start.tpl"}
Die „Modularisierung“ der Navigation (wäre sie nicht modularisiert, wäre das Problem übrigens dasselbe) habe ich in erster Linie eingesetzt, damit diese Navigation für Euch wartbar bleibt -- je kleiner die Teile, in die man sie aufsplittet, umso weniger fehleranfällig wird das Gesamtkonstrukt. Zudem war (und ist) es wie erwähnt unmöglich, die von Euch gewünschte Navigationsstruktur in s9y dynamisch generieren zu lassen, einfach deshalb, weil in beiden Navigationen munter Links auf verschiedene Quellen (Kategorien, statische Seiten usw.) vermischt werden.
s9y bietet z.B. ein Seitenleisten-Plugin, um eine Liste der statischen Seiten auszugeben (mit dem allerdings die currpage-Methode auch nicht funktionieren würde) -- aber keine „eierlegende Wollmilchsau“, die einem eine Navigation „einmal mit allem (und scharf
So. Was tun?
Man müsste irgendwie™ das hart einkodierte href-Attribut auslesen, mit der URL der aktuellen Seite vergleichen und bei Übereinstimmung eine CSS-Klasse zuweisen. Für meine Begriffe schreit das nach Javascript (funktioniert dann halt auch nur bei Besucher, die JS aktiviert haben), aber möglicherweise fällt jemand anderem noch eine bessere, serverseitige Lösung ein.
Garvin?
YL
Re: Markierung des aktiven Menüpunktes
Alles zurück, ich bin wirr.yellowled wrote:So. Was tun?
Ich bin mir jetzt nicht sicher, ob Du das nachträglich implementiert hast oder ob ich das noch gemacht habe, aber im Moment markiert die Hauptnavigation ja bereits den aktiven Link, z.B. so:
Code: Select all
<li><a style="color:#184E8B; background-color:#ffffff;" href="{$serendipityBaseURL}kontakt.html">Kontakt</a></li>Code: Select all
<li><a class="active" href="{$serendipityBaseURL}kontakt.html">Kontakt</a></li>Code: Select all
#navi a.active { ... }Code: Select all
.areanav a:active { ... }Am Beispiel der sidenav_hort.tpl:
Code: Select all
<li><a href="{$serendipityBaseURL}categories/15-Aktuell">Aktuell</a></li>Code: Select all
<li><a{if $currpage=='{$serendipityBaseURL}categories/15-Aktuell'} class="active"{if} href="{$serendipityBaseURL}categories/15-Aktuell">Aktuell</a></li>YL
Re: Markierung des aktiven Menüpunktes
Hallo yellowled,
...danke für die Antwort und das Kopfrauchen
Hab Deine Anregungen umgesetzt:
in der eingenes_Template/style.css:
In der eigenes_Template/index.php als Beispiel in einem Hauptmenü-Link:
sowie als Beispiel ein Link in der eigenes_Template/sidenav_kinderhaus.tpl:
Leider funktionieren beide Beispiele nicht: Es erscheinen keine Fehlermeldungen, aber die Hintergrundfarbe ist beim Link der gerade angezeigten Seite auch nicht geändert. Es wäre schön, wenn es eine serverseitige Lösung gibt...
...danke für die Antwort und das Kopfrauchen
Die mainnav.tpl mit den ganzen einzelnen folgenden *.tpl (wie etwa der mainnav_start.tpl) sind von uns programmiert, um in jeder einzelnen *.tpl alle Links zu wiederholen und nur den aktiven über style= zu markieren. Hiervon würden wir auch gerne wegkommen, beim Seitenmenü sowieso. Bei Deiner Lösung wäre das tolle, dass jeder Link nur einmal mit der if-Abfrage behandelt werden muss!Ich bin mir jetzt nicht sicher, ob Du das nachträglich implementiert hast oder ob ich das noch gemacht habe, aber im Moment markiert die Hauptnavigation ja bereits den aktiven Link
Hab Deine Anregungen umgesetzt:
in der eingenes_Template/style.css:
Code: Select all
#navi a.active {
color:#184E8B;
background-color:#ffffff;
}
.areanav a:active {
color:#184E8B;
background-color:#ffffff;
}Code: Select all
<li><a{if $currpage == '{$serendipityBaseURL}' class="active"{/if} href="{$serendipityBaseURL}">Start</a></li>Code: Select all
<li><a {if $currpage == '{$serendipityBaseURL}categories/19-Aktuell}' class="active" {/if} href="{$serendipityBaseURL}categories/19-Aktuell">Aktuell</a></li>Re: Markierung des aktiven Menüpunktes
Wenn ich dazu komme, sehe ich mir das gerne am Wochenende nochmal an. Es wäre möglich (das an dieser Stelle zunächst als „Gedächtnisstütze“ für mich), dass die https-Geschicht da irgendwie in die Suppe spuckt, aber vorerst bitte einfach alles so lassen, wie es derzeit ist, damit ich es auf Fehler prüfen kann.search1 wrote:Leider funktionieren beide Beispiele nicht: Es erscheinen keine Fehlermeldungen, aber die Hintergrundfarbe ist beim Link der gerade angezeigten Seite auch nicht geändert. Es wäre schön, wenn es eine serverseitige Lösung gibt...
Eine Möglichkeit für eine komplett serverseitige bzw. dynamische Lösung sehe ich, offen gesagt, aufgrund der von Euch gewünschten Navigationsstruktur nicht. Theoretisch könnte man eine dynamische Hauptnavigation und mehrere dynamische Bereichsnavigationen implementieren, aber bei dieser Menge wird das nicht nur unübersichtlich bis zur Unwartbarkeit, es dürfte so langsam auch ein Performanceproblem geben.
YL
Re: Markierung des aktiven Menüpunktes
Das ist ja nett!Wenn ich dazu komme, sehe ich mir das gerne am Wochenende nochmal an.
...habe mit einem offline-Testsystem getestet; daher ist online nichts von den Code-Änderungen zu sehen...bitte einfach alles so lassen, wie es derzeit ist, damit ich es auf Fehler prüfen kann.
Liebe Grüße
search1
Re: Markierung des aktiven Menüpunktes
Äh. Ja, sehe ich. Nur: Dann kann ich natürlich nicht gucken, was da schief läuft. Zudem ist es je nach Setup durchaus denkbar, dass diese Geschichte in einer Testumgebung nicht funktioniert, dass käme auf die Testumgebung an.search1 wrote:...habe mit einem offline-Testsystem getestet; daher ist online nichts von den Code-Änderungen zu sehen...bitte einfach alles so lassen, wie es derzeit ist, damit ich es auf Fehler prüfen kann.
YL
Re: Markierung des aktiven Menüpunktes
Hallo yellowled,
hab die Änderungen in der /test/templates/eingenes_Template/style.css und /test/templates/eigenes_Template/sidenav_kinderhaus.tpl life gestellt in einer Testversion, die einfach vor der Adresse mit test. beginnt und sich im Ordner /test befindet.
Aber auch damit waren im Kinderhaus-Seitenmenü keine Änderungen zu sehen.
Habe auch stets den Ordner /test/templates_c gelöscht, da bei mir in der Vergangenheit erst hiernach eine Änderung am Menü sichtbar wurde.
Gerne, wenn Dir ein Fehler bei meiner Lösung auffällt oder die Idee zu einer anderen Lösung kommt...
Danke und viele Grüße
search1
hab die Änderungen in der /test/templates/eingenes_Template/style.css und /test/templates/eigenes_Template/sidenav_kinderhaus.tpl life gestellt in einer Testversion, die einfach vor der Adresse mit test. beginnt und sich im Ordner /test befindet.
Aber auch damit waren im Kinderhaus-Seitenmenü keine Änderungen zu sehen.
Habe auch stets den Ordner /test/templates_c gelöscht, da bei mir in der Vergangenheit erst hiernach eine Änderung am Menü sichtbar wurde.
Gerne, wenn Dir ein Fehler bei meiner Lösung auffällt oder die Idee zu einer anderen Lösung kommt...
Danke und viele Grüße
search1
Re: Markierung des aktiven Menüpunktes
Ich kann nur raten, sowas gleich live zu machen. Gerade hier, mit https etc. pp., kann so viel quer schießen, da ist so eine Testumgebung nicht unbedingt aussagekräftig. Und es lässt sich ja recht simpel so testen, dass man garantiert nichts zerschießt.search1 wrote:hab die Änderungen in der /test/templates/eingenes_Template/style.css und /test/templates/eigenes_Template/sidenav_kinderhaus.tpl life gestellt in einer Testversion, die einfach vor der Adresse mit test. beginnt und sich im Ordner /test befindet.
Es sei denn ...
... man hat Tippfehler in der betreffenden tpl-Datei.search1 wrote:Aber auch damit waren im Kinderhaus-Seitenmenü keine Änderungen zu sehen.
Nachdem es korrekt aber auch nicht funktionierte, habe jetzt mal eine Debug-Ausgabe eingebaut. Die macht nichts anderes als $currpage und $currpage2 auszugeben, aber damit sieht man sofort, was das Problem ist: Die Variablen enthalten nicht die korrekten Werte, was vermutlich (da bin ich echt kein Experte) an Eurem https-Zertifikat liegt. Somit sind die Variablen $currpage/$currpage2 hier nutzlos, sie wären es auch, wenn die Navigationen nicht statisch wären.
Ich würde jetzt wirklich langsam überlegen, ob so eine Kleinigkeit wie die Markierung eines Menüpunktes in der Sekundärnavigation diesen Aufwand überhaupt noch lohnt.
YL
Re: Markierung des aktiven Menüpunktes
Danke für die Antwort!
Was für einen (kostenlosen) Editor verwendest Du? Bin bisher ganz zufrieden mit dem Notepad++, keine Ahnung, ob der mit irgendwelchen Einstellungen Klammern automatisch schließt?
Wir wollen unbedingt das Seitenmenü markieren; man hat sonst keine Ahnung, wo man sich gerade befindet. Im Notfall dann halt nicht serverseitig, aber vielleicht hat ja noch jemand eine Idee?
Was für einen (kostenlosen) Editor verwendest Du? Bin bisher ganz zufrieden mit dem Notepad++, keine Ahnung, ob der mit irgendwelchen Einstellungen Klammern automatisch schließt?
Wir wollen unbedingt das Seitenmenü markieren; man hat sonst keine Ahnung, wo man sich gerade befindet. Im Notfall dann halt nicht serverseitig, aber vielleicht hat ja noch jemand eine Idee?
Re: Markierung des aktiven Menüpunktes
Keine Ahnung, ich verwende GEdit auf einem Linuxsystem.search1 wrote:Was für einen (kostenlosen) Editor verwendest Du? Bin bisher ganz zufrieden mit dem Notepad++, keine Ahnung, ob der mit irgendwelchen Einstellungen Klammern automatisch schließt?
Es könnte sein, dass es funktioniert, wenn man die URL in der if-Anweisung komplett hart einkodiert, also inklusive https://usw. anstelle des {$serendipityBaseURL}, da diese Variable offensichtlich irgendwie™ Schwierigkeiten mit dem Zertifikat hat. Macht das Ganze natürlich noch statischer und noch komlizierter zu warten.search1 wrote:Im Notfall dann halt nicht serverseitig, aber vielleicht hat ja noch jemand eine Idee?
Alternative: Javascript. Funktioniert dann nur für Besucher, die JS aktiv haben. Per JS die Link-URL speichern, mit der URL der aktuellen Seite vergleichen und bei Übereinstimmung die Klasse setzen. Könnte bei dieser Menge an Links schon in puncto Performance stinken.
Mehr fällt mir nicht ein.
YL
Re: Markierung des aktiven Menüpunktes
Hallo yellowled,
möchte mich bei Dir ganz herzlich bedanken, jetzt geht die Markierung der Menüpunkte.
Problem war bisher ein einziger falscher Doppelpunkt:
Ersetzt man diesen mit:
und verwendet $currpage2:
klappt alles wunderbar.
Danke.
Einzige Steigerung wäre noch, wenn man etwa mit einer anderen Hintergrundfarbe markieren könnte, wenn man sich innerhalb eines Eintrags innerhalb eines Seitenmenüs befindet. Momentan wird das Seitenmenü logischerweise nur als "active" markiert, wenn es sich in der Übersichtsvariante befindet.
Hast Du hierzu eine Idee?
möchte mich bei Dir ganz herzlich bedanken, jetzt geht die Markierung der Menüpunkte.
Problem war bisher ein einziger falscher Doppelpunkt:
Code: Select all
.areanav a:active {
color:#184E8B;
background-color:#ffffff;
}Code: Select all
.areanav a.active {
color:#184E8B;
background-color:#ffffff;
}Code: Select all
<li><a {if $currpage2 == '/categories/19-Aktuell'} class="active"{/if} href="{$serendipityBaseURL}categories/19-Aktuell">Aktuell</a></li>Danke.
Einzige Steigerung wäre noch, wenn man etwa mit einer anderen Hintergrundfarbe markieren könnte, wenn man sich innerhalb eines Eintrags innerhalb eines Seitenmenüs befindet. Momentan wird das Seitenmenü logischerweise nur als "active" markiert, wenn es sich in der Übersichtsvariante befindet.
Hast Du hierzu eine Idee?
Re: Markierung des aktiven Menüpunktes
Sehr theoretisch könnte man das hinbiegen, indem man die Kategorie der Artikels ermittelt (könnte bei multipler Kategoriezuordnung haarig werden, falls Ihr sowas benutzt) und irgendwie™ auswertet, aber das ist nicht ganz trivial, weshalb ich jetzt auch nicht ein Codebeispiel liefern kann, ohne stundenlang knietief in der Template-Dokumentation zu waten.search1 wrote:Einzige Steigerung wäre noch, wenn man etwa mit einer anderen Hintergrundfarbe markieren könnte, wenn man sich innerhalb eines Eintrags innerhalb eines Seitenmenüs befindet. Momentan wird das Seitenmenü logischerweise nur als "active" markiert, wenn es sich in der Übersichtsvariante befindet.
Hast Du hierzu eine Idee?
YL