Dadurch, dass es hier ja schon sehr viele Lösungen für verschiedene Menüs mit Show_menu2 gibt habe ich mal einiges Zusammen geschrieben.
Bitte beachtet, dass dieser Beitrag von Zeit zu Zeit um neue Lösungen ergenzt wird!
Vorab, gibt es aber noch eine kurze Ein/Anleitung zu Show_Menu2.
Was ist Show_Menu2? Ist ein Code-Snippet für das CMS Website Baker. Es stellt einen kompletten
Ersatz für die eingebaute Menüfuntionalität zur Verfügung. Alle, für die
Erzeugung des Menüs erforderlichen Daten, werden durch eine einzige
Datenbankabfrage erzeugt. Durch umfangreiche Anpassungsmöglichkeiten des
erzeugten HTML-Code können alle möglichen Menüarten (Listen, Breadcrumbs,
Sitemaps, usw.) erzeugt werden.
Quelle: /modules/show_menu2/README.de.txt
Benutzung von Show_Menu2:Um show_menu2 zu benutzen muss das verwendete Template an den Stellen
modifiziert werden, an denen das Menü erscheinen soll. Bitte beachten: Wenn alte
Menüaufrufe ersetzt werden, müssen unbedingt auch die entsprechenden neuen
Parameter verwendet werden die show_menu2 benötigt.
In den meisten Fällen genügt bereits der Standardaufruf ohne weitere Parameter
von show_menu2. In diesem Fall werden die Vorgabewerte verwendet, dies erzeugt
ein Menü das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
show_menu2();
Bitte beachten: der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-
Codezeichen eingeschlossen werden (ausser der Aufruf erfolgt bereits innerhalb
von PHP Code):
<?php show_menu2(); ?>
Quelle: /modules/show_menu2/README.de.txt
Funktion von Show_Menu2: Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
show_menu2(
$aMenu = 0,
$aStart = SM2_ROOT,
$aMaxLevel = SM2_CURR+1,
$aOptions = SM2_TRIM,
$aItemOpen = '[li][a][menu_title]</a>',
$aItemClose = '</li>',
$aMenuOpen = '[ul]',
$aMenuClose = '</ul>',
$aTopItemOpen = false,
$aTopMenuOpen = false
)
$aMenu = 0 ist in den meisten Anwendungsfällen der beste Wert.
$aStart muß entweder eine page ID oder ein Wert der mit "SM2_" beginnt sein.
$aMaxLevel kann nur Werte erhalten, die mit "SM2_" beginnen.
$aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit
"SM2_" beginnen zulässig.
Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs
steuern.
Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den
jeweiligen Vorgabewert zu erhalten.
Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu
erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte
Verwendung finden:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
Quelle: /modules/show_menu2/README.de.txt
Die Parameter:$aMenu
Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu
verwenden.
Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
im System verwendeten Menüs zurück.
$aStart
Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den
meisten Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es
kann einer der folgenden Werte verwendet werden:
SM2_ROOT+N Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
SM2_ROOT Beginnt auf der obersten Ebene
SM2_ROOT+1 Beginnt eine Ebene unterhalb der obersten Ebene
SM2_ROOT+2 Beginnt zwei Ebenen unterhalb der obersten Ebene
SM2_CURR+N Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
SM2_CURR Beginnt auf der aktuellen Ebene. Alle Geschwister
der aktuellen Ebene
SM2_CURR+1 Beginnt eine Ebene unterhalb der aktuellen Ebene
mit allen Unterebenen
page_id Verwendet die Seite mit der angegebenen page id als Elternelement.
Alle Untermenüs dieser Seite werden angezeigt.
(Die page id kann ermittelt werden, wenn man die Seite im
Admin-Backend editiert, sie steht dann in der Adresszeile des
Browsers:
http://SITE/admin/pages/modify.php?page_id=35$aMaxLevel
Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier
festgelegten Ebene.
SM2_ALL Keine Beschränkung, alle Ebenen werden angezeigt
SM2_CURR+N Zeigt immer die aktuelle Seite + N Ebenen.
SM2_CURR Aktuelle Ebene (keine Unterebene)
SM2_CURR+3 Alle übergeordneten + aktuelle + 3 Unterebenen
SM2_START+N Beginnt immer auf der Startebene + N Ebenen.
Die Ebenen werden unabhängig davon angezeigt,egal
auf welcher Ebene sich die aktuelle Seite befindet.
SM2_START Eine einzelne Ebene ab der Startebene.
SM2_START+1 Startebene + eine Ebene darunter.
SM2_MAX+N Zeigt höchstens N Ebenen ab der Startebene.
Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
SM2_MAX Nur die Startebene (gleiche Wirkung wie SM2_START)
SM2_MAX+1 Die Startebene und eine Ebene darunter.
$aOptions
Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
GROUP 1
-------
Aus dieser Gruppe muss stets genau ein Flag angegeben werden. Diese Flags
bestimmen auf welche Weise die Geschwisterelemente im Menübaum in der
Ausgabe unterdrückt werden.
SM2_ALL Zeigt alle Zweige des Menübaums
A-1 -> B-1
-> B-2 -> C-1
-> C-2 (CURRENT)
-> D-1
-> D-2
-> C-3
A-2 -> B-3
-> B-4
SM2_TRIM Zeigt alle Geschwistermenüs der Seite im aktuellen Pfad.
Alle Untermenüs von Elemnten die sich nicht im Pfad befinden
werden entfernt.
A-1 -> B-1
-> B-2 -> C-1
-> C-2 (CURRENT)
-> D-1
-> D-2
-> C-3
A-2
SM2_CRUMB Zeigt den Breadcrumb Pfad des Menüs an, also den aktuellen
Menüpunkt sowie alle Menüpunkte die dorthin führen.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING Wie SM2_TRIM, es werden aber nur Geschwistermenüs der aktuellen
Seite angezeigt. Alle anderen Punkte werden unterdrückt.
A-1 -> B-2 -> C-1
-> C-2 (CURRENT)
-> D-1
-> D-2
-> C-3
GROUP 2
-------
Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
SM2_NUMCLASS Fügt die nummerierten Menüklassen "menu-N" und
"menu-child-N hinzu.
SM2_ALLINFO Lädt alle Felder aus der Seitentabelle der Datenbank.
Dies verursacht einen ziemlich hohen Speicherverbauch und sollte
deshalb nur mit Bedacht verwendet werden.
Dadurch werden z.B. die Keywords, die Seitenbeschreibung sowie
all die anderen Informationen verfügbar, die normalerweise nicht
geladen werden.
Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2
für die jeweilige Menü ID verwendet werden, oder in Verbindung
mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
SM2_NOCACHE Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank
gelesen.
SM2_PRETTY Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders
nützlich beim Debuggen der Menüausgabe.
SM2_BUFFER Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
zwischen und gibt ihn als kompletten String aus.
SM2_CURRTREE Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
kombiniert werden.
SM2_ESCAPE Wendet htmlspecialchars auf den Menüstring an.
Dies kann bei älteren Websitebaker Installationen erforderlich
sein um eine valide HTML Ausgabe zu erzeugen.
SM2_SHOWHIDDEN Hidden pages are usually hidden all of the time, including
when they are active (i.e. current page or a parent page).
Use private pages for time when you want pages to be
hidden except when active. However for compatibility with
release 4.8, supply this flag to enable hidden pages to
become visible when they are active.
SM2_XHTML_STRICT Stellt die XHTML-Kompatibilität der Links sicher indem
in per [a] oder [ac] formatierten Links die Targetangabe
entfernt und das Argument title="[page_titel]" eingefügt
wird. Bei manuell zusammengestellten Links ist der Designer
selbst für die XHTML-Konformität zuständig.
SM2_NO_TITLE Unterdrückt die Ausgabe des Inhaltes des Title-Attributes
bei [a] oder [ac] formatierten links. Im XHTML-Strikt Modus
wird 'title' mit einen ausgegeben.
Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
$aItemOpen
Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
Formatstring definiert werden.
Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
'
- [a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
Standardfunktion show_menu() zu gewährleisten.
Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den
<a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
verwenden: '<li>[ac][menu_title]</a>'.
Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER.
Wenn hier ein Formatter angegeben wird, werden alle Argumente
nach $aItemOpen ignoriert.
$aItemClose
Dieser String schließt jeden Menüpunkt ab.
Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
ersetzt!
Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
$aMenuOpen
Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
werden.
Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
verwendet.
$aMenuClose
Dieser String schließt jedes Menü ab.
Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
ersetzt!
Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
$aTopItemOpen
Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
$aTopMenuOpen
Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
Quelle: /modules/show_menu2/README.de.txt
Bitte beachtet, dass das nur ein Auszug aus der Readme des Show_Menu2 ist. Es empfiehlt sich diese Readme in Ruhe zu lesen.Da es immer wieder zu Fragen kommt, wie man weitere Menüs Definieren kann verweiße ich auf den dazugehörigen Beitrag:zum beitragLösungen für verschiedene Menüs:Auch hier gibt es zu beachten, viele der Codestellen stammen von der README und der
Demoseite:
Um beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur darzustellen, könnte man folgenden Aufruf verwenden:
[/list]
show_menu2(0, SM2_ROOT, SM2_START);
Bis zu zwei Unterebenen der aktuellen Seite anzuzeigen:
show_menu2(0, SM2_CURR+1, SM2_CURR+2);
Das gesamte Menü ausgeben:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_NUMCLASS|SM2_PRETTY, false, false, '<ul class="mark [class]">');
Sitemap mit Show_Menu2:
show_menu2(SM2_ALLMENU, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_ALLINFO, '[li]<span class="content">[a][page_title]</a> (menu: [a][menu_title]</a>)<br /><i>[description]</i><br />([keywords])</span>', false, '<ul class="sitemap [class]">');
Breadcrumbs mit Show_Menu2
(Anmerkung: Websitebaker hat auch eine eigene Funktion dafür: show_breadcrumbs())show_menu2(0, SM2_ROOT, SM2_CURR, SM2_CRUMB, '<span class="[class]"> > [a][menu_title]</a>', '</span>', '', '', '<b>Sie befinden sich hier:</b> <span class="[class]">[a][menu_title]</a>');
Nur den Aktuellen Menüzweig ausgeben:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL|SM2_CURRTREE);
Tabellenbasiertes Menü:
<table border="1">
show_menu2(0, SM2_ROOT, SM2_START, SM2_ALL, '<tr><td class="[class]">[a][menu_title]</a>', '</td></tr>', '', '');
</table>
Span basiertes Menü:
show_menu2(0, SM2_ROOT, SM2_START, SM2_ALL, '<span>| [a][menu_title]</a>', ' |</span>', '', '');
Accordion Menü mit Show_Menu2:
Zum Beitrag
Navigation in der Seitenleiste soll den Text der Übergeordneten Seite als Überschrift tragen
Zum Beitrag
Grafisches Drop-Down Menü 2 Sprachig
Zum Beitrag
Spezielle Seite, nur 1 Ebene tief
show_menu2(1, 79, SM2_START+1, SM2_ALL|SM2_PRETTY);
Zum Beitrag
Gleiche Menütitel, verschiedene Seitentitel
Zum Beitrag
Einen einzigen Seitenbaum mit einem oberen Horizontalmenü und einem abhängigen seitlichen Vertikalen Untermenü
<?php show_menu2(1, SM2_ROOT, SM2_START, SM2_TRIM | SM2_NUMCLASS , '<li>[ac][menu_title]</a>','</li>','<ul>','</ul>'); ?>
<?php show_menu2(0, SM2_ROOT+1, SM2_CURR+3, SM2_TRIM | SM2_NUMCLASS , '<li>[ac][menu_title]</a>','</li>','<ul>','</ul>'); ?>
Zum Beitrag
Trennzeichen nicht anzeigen
CSS - Lösung:
<style type="text/css">
span.menu-current { display: none; } /* hier wird der Link bei Bedarf ausgeblendet */ }
span.menu-sibling { /* hier das rein, was bisher in .siblings drin war */ }
span.menu-sibling a { /* hier die Grundformatierung für den Link */ }
span.menu-sibling a:hover { /* hier die Hover-Formatierung für den Link */ }
span.menu-sibling span { /* hier die Formatierung für den Trenner (Pipe) */ }
span.menu-last span { display: none; } /* hier wird der Trenner bei Bedarf ausgeblendet */
</style>
show_menu2(
0,
SM2_CURR,
SM2_CURR,
SM2_PRETTY,
'<span class="[class]">[a][menu_title]<span> | </span></a>',
'</span>',
'',
''
);
Bedienungslösung:
<style type="text/css">
span.menu-sibling { /* hier das rein, was bisher in .siblings drin war */ }
span.menu-sibling a { /* hier die Grundformatierung für den Link */ }
span.menu-sibling a:hover { /* hier die Hover-Formatierung für den Link */ }
span.menu-sibling span { /* hier die Formatierung für den Trenner (Pipe) */ }
</style>
show_menu2(
0,
SM2_CURR,
SM2_CURR,
SM2_PRETTY,
'[if(class==menu-sibling){<span class="[class]">[a][menu_title] }][if(class==menu-sibling && class!=menu-last){<span> | </span>}][if(class==menu-sibling){</a>}]',
'[if(class==menu-sibling){</span>}]',
'',
''
);
Zum Beitrag