show_menu2, version 4.6 ======================= 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. --- Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte eine Email an bjm@wwnw.de. --- INSTALLATION ============ 1. Die aktuelle Version von http://code.jellycan.com/show_menu2/ herunterladen. 2. In das Admin-Backend der Website Baker Installation einlogen. 3. Erweiterungen -> Module aufrufen. 4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über "Modul deinstallieren" auswählen und deinstallieren. 5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File auswählen und installieren. 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): Dieses Vorgabe Menü erzeugt bereits ein komplettes Menü auf Listenbasis mit etlichen Klassen, die eine leichte Formatierung mittels CSS ermöglichen. Es wird z.B. die Klasse "menu-current" zu dem
  • Tag des aktuellen Menüpunktes hinzugefügt, zusätzlich erhält jeder Menüpunkt der Unterpunkte enthält die Klasse "menu-expand". Dies erlaubt es sehr differenzierte CSS Regeln für die einzelnen Menüpunkte aufzustellen. Zum Beispiel: li.menu-expand { font-weight: bold; } li.menu-current { background: red; } Im Abschnitt "HTML-Ausgabe" findet sich eine detaillierte Beschreibung welche Klassen welchem Element zugeordnet werden. Durch die Verwendung von verschiedenen Parametern bei dem show_menu2 Funktionsaufruf lassen sich auch recht umfangreiche und unterschiedliche Menüstrukturen erzeugen. Um beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur darzustellen, könnte man folgenden Aufruf verwenden: show_menu2(0, SM2_ROOT, SM2_START); Oder um beispielsweise bis zu zwei Unterebenen der aktuellen Seite anzuzeigen: show_menu2(0, SM2_CURR+1, SM2_CURR+2); Es gibt jede Menge Möglichkeiten, um die unterschiedlichten Menüstrukturen zu erzeugen, zahlreiche Beispiele dazu findet man auf der Demo-Website: http://code.jellycan.com/sm2test/ FUNKTION ======== 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, $aFlags = SM2_TRIM, $aItemOpen = '[li][a][menu_title]', $aItemClose = '
  • ', $aMenuOpen = '[ul]', $aMenuClose = '', $aTopItemOpen = false, $aTopMenuOpen = false ) Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes einzelnen Parameters. 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, '
      ', '
    '); Bitte beachten: bis einschliessich $aFlags müssen alle Parameter explizit übergeben werden! HTML-AUSGABE ============ Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden. Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei einzelne Menüpunkte, wenn erforderlich, auch mehrere Klassen erhalten können. KLAssE ZUORDNUNG ------------ ------------------------------------------------------- menu-top Nur der erste Menüpunkt menu-parent Jeder Hauptmenüpunkt. menu-current Nur der Menüpunkt der aktuellen Seite. menu-sibling Alle "Geschwister" der aktuellen Seite. menu-child Jedes Untermenü der aktuellen Seite. menu-expand Jedes Menü das Untermenüs hat. menu-first Der erste Punkt eines jeden Menüs oder Untermenüs. menu-last Der letzte Punkt eines jeden Menüs oder Untermenüs. Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLAss flag gesetzt ist: menu-N Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe, beginnend bei 0, des jeweiligen Menüpunktes steht. Die oberste Ebene ist also immer menu-0, die nächste Ebene menu-1 usw. menu-child-N Jedes Untermenü der aktuellen Seiten, wobei das N für die RELATIVE Tiefe des Untermenüs, beginnend bei 0, steht. Beispiel einer HTML-Ausgabe: PARAMETER ========= $aMenu Nummer des Menüs. Dies 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 unterhalbe der obersten Ebene SM2_ROOT+2 Beginnt zwei Ebenen unterhalbe 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 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 Starting level only (same as SM2_START) SM2_MAX+1 Maximum of starting level and 1 level. $aFlags 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. Dies 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 al 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_NOESCAPE Dies ist das Standarverhalten und existiert nur aus Gründen der Abwärtskompatibiltät. $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 '[li][a][menu_title]' verwendet um die Kompatibiltät zur Website Baker Standardfunktion show_menu() zu gewährleiten. Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den Tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu verwenden: '
  • [ac][menu_title]'. Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü verwendet werden. Im Abschnitt "Formatter" findet sich dazu eine detailierte Beschreibung. Wenn hier ein Formatter angegeben wird, werden alle Argumente nach $aItenOpen ignoriert. $aItemClose Dieser String schliesst 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 '
  • ' 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 schliesst 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 '' 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. FORMAT STRINGS ============== Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen verwendet werden und werden durch den entsprechenden Text ersetzt. [a] tag ohne Klasse: '' [ac] tag mit Klasse: '' [li]
  • tag mit Klasse: '
  • ' [ul]