show_menu2, Version 4.9x
Show_Menu2 ist ein Code-Snippet für das CMS WebsiteBaker. Seit WebsiteBaker 2.7 ist es im CMS enthalten.
Die bisherige show_menu-Funktion wird komplett ersetzt und um show_menu2 erweitert. Alle zum Erstellen des Menüs erforderlichen Daten werden durch eine einzige Datenbankabfrage generiert. Durch umfangreiche Anpassungsmöglichkeiten des generierten HTML-Codes werden alle möglichen Menütypen (Listen, Breadcrumbs, Sitemaps, etc.) unterstützt.) erzeugt werden können.
- Installation
- Verwendung von Show_Menu2
- FAQ
- Funktion
- HTML-Ausgabe
- Parameter
- Erweiterte Optionen
- Formatzeichenfolgen
- Bedingte Formatierung
- Formatierer
INSTALLATIONup
Da show_menu2 normalerweise in WebsiteBaker vorhanden ist, ist keine Installation erforderlich. Wenn es wider Erwarten nicht existiert, können Sie es hier herunterladen.
Verwenden von SHOW_MENU2up
Um show_menu2 zu verwenden, müssen Sie die Vorlage ändern, in der das Menü angezeigt werden soll. Bitte beachten Sie: Wenn alte Menüaufrufe ersetzt werden, müssen auch die entsprechenden neuen Parameter verwendet werden, die show_menu2 benötigt.
In den meisten Fällen ist der Standardaufruf mit mindestens 4 Parametern von show_menu2 ausreichend. In diesem Fall werden die Standardwerte verwendet, dadurch wird ein Menü erstellt, das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
Bitte beachten Sie: Der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-Codezeichen eingeschlossen sein (es sei denn, der Aufruf befindet sich bereits im PHP-Code):
<?php show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM); ?>
Dieses Standardmenü erstellt bereits ein komplettes Menü auf Listenbasis mit mehreren Klassen, die eine einfache Formatierung mit CSS ermöglichen. Zum Beispiel wird die Klasse „menu-current“ zum < -> -Tag des aktuellen Menüelements hinzugefügt. Zusätzlich enthält jeder Menüpunkt der Unterpunkte die Klasse „menu-expand“. Dies ermöglicht es, sehr differenzierte CSS-Regeln für jeden Menüpunkt zu erstellen.
Zum Beispiel:
li.menu-expand { font-weight: bold; }li.menu-current { background: red; }
Der Abschnitt „HTML-Ausgabe“ enthält eine detaillierte Beschreibung, welche Klassen welchem Element zugeordnet sind. Durch die Verwendung verschiedener Parameter im Funktionsaufruf show_menu2 ist es auch möglich, recht umfangreiche und unterschiedliche Menüstrukturen zu erstellen. Um beispielsweise nur Menüelemente aus der obersten Ebene der Menüstruktur anzuzeigen, können Sie den folgenden Aufruf verwenden:
show_menu2(0, SM2_ROOT, SM2_START, SM2_TRIM);
Oder um beispielsweise bis zu zwei Unterebenen der aktuellen Seite anzuzeigen:
show_menu2(0, SM2_CURR+1, SM2_CURR+2, SM2_TRIM);
Es gibt viele Möglichkeiten, verschiedene Menüstrukturen zu erstellen. Zahlreiche Beispiele finden Sie auf der Demo-Website: KLICK
FAQup
F: Ich bin kein Programmierer. Gibt es keine einfachere Dokumentation?
EIN: Nein, denn dies ist bereits die einfache Dokumentation.
F: Wie kann ich ein Dropdown-Menü erstellen?
A: Das hat nichts mit show_menu2 zu tun. Um ein Dropdown-Menü zu erstellen, müssen Sie nur den CSS-Code der jeweiligen Vorlage anpassen. Die notwendigen Anpassungen finden Sie z.B. im Template „allcss2“ aus dem WebsiteBaker Addon Repository -> https://addon.websitebaker.org/
F: Warum verschwindet das Menü, nachdem ich die Suchfunktion in einer mehrsprachigen WebsiteBaker-Seite verwendet habe?
A: Die notwendigen Zeilen fehlen in der verwendeten Vorlage:
<input type="hidden" name="referrer" value="" />
<input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
F: Mehrsprachig? Das klingt toll. Wie machst du das?
EIN: https://help.websitebaker.org/en/designerguide/multilingual-websites.php
F: Jedes Mal, wenn eine Seite aufgerufen wird, generiert SM2 die folgende Warnmeldung:
„show_menu2 error: $AOptions is invalid. Keine Flaggen aus Gruppe 1 geliefert!“
EIN: Die falschen Werte oder eine falsche Anzahl von Werten wurden an die Funktion übergeben.
Im Abschnitt PARAMETER finden Sie die korrekten Flag-Werte, die an den Parameter $AOptions übergeben werden sollen.
F: Wie verwende ich eine andere Klasse / Bild / Farbe / Widget für jeden Eintrag in einem Menü?
A: Verwenden Sie die Formatzeichenfolge in der Zeichenfolge $aItemOpen. Erstellen Sie eine eindeutige Klasse oder ID für jedes Menüelement und verweisen Sie dann in Ihrem CSS oder Javascript auf dieses Element, um alles zu tun, was Sie möchten.
Hinzufügen einer eindeutigen Klasse für jedes Menüelement (oder ähnliches):
"<li><a href="" target="" class=" p"></a>"
… erstellen von Menüpunkten wie …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
Referenzieren Sie dies in Ihrem CSS wie:
a.p45 { color: red; }
So fügen Sie eine eindeutige ID für jedes Menüelement (oder ähnliches) hinzu):
"<li><a href="" target="" class=""></a>"
… erstellen von Menüpunkten wie …
<li><a href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
Referenzieren Sie dies in Ihrem CSS wie:
a#p45 { color: red; }
Beachten Sie, dass die ID nur verwendet werden kann, wenn dieses Menü nur einmal auf der Seite generiert und angezeigt wird (da HTML-IDs innerhalb einer Seite eindeutig sein müssen).
FUNCTIONup
Der vollständige Aufruf und die Standardparameterwerte für show_menu2 lauten wie folgt:
show_menu2( $aMenu = 0, $aStart = SM2_ROOT, $aMaxLevel = SM2_CURR+1, $aOptions = SM2_TRIM, $aItemOpen = '</a>', $aItemClose = '</li>', $aMenuOpen = '', $aMenuClose = '</ul>', $aTopItemOpen = false, $aTopMenuOpen = false);
Der Abschnitt „Parameter“ enthält eine detaillierte Beschreibung jedes einzelnen Parameters.
Jeder Parameter muss absolut korrekt verwendet werden. Die folgenden Regeln können helfen:
$aMenu = 0 ist in den meisten Fällen der beste Wert.
$AStart muss entweder eine Seiten-ID oder ein Wert sein, der mit „SM2_“ beginnt.
$aMaxLevel kann nur Werte erhalten, die mit „SM2_“ beginnen.
$AOptions bis auf wenige Sonderfälle sind nur Werte erlaubt, die mit „SM2_“ beginnen.
Alle anderen 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 Standardwert zu erhalten.
Damit kann z.B. eine nummerierte Liste erstellt werden, während für die einzelnen Menüpunkte weiterhin die Standardwerte verwendet werden:
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
Bitte beachten Sie: Bis einschließlich $AOptions müssen alle Parameter explizit übergeben werden!
HTML Outputup
Die HTML-Ausgabe hängt weitgehend davon ab, welche Parameter an die Funktion übergeben werden. Unabhängig davon werden für jedes Menü immer nachfolgende Klassen verwendet, wobei einzelne Menüpunkte bei Bedarf auch mehrere Klassen aufweisen können.
KLASSE | ZUORDNUNG |
---|---|
menu-top | Nur der erste Menüpunkt. |
menu-parent | Beliebiger Hauptmenüpunkt. |
menu-current | Nur der Menüpunkt der aktuellen Seite. |
menu-sibling | Alle „Geschwister“ der aktuellen Seite. |
menu-child | Beliebiges Untermenü der aktuellen Seite. |
menü- Erweitern Sie | Jedes Menü mit Untermenüs. |
menu-first | Das erste Element eines Menüs oder Untermenüs. |
menu-last | Der letzte Eintrag eines Menüs oder Untermenüs. |
menu-N | Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe, beginnend mit 0, des jeweiligen Menüpunktes steht. Die oberste Ebene ist also immer Menü-0, die nächste Ebene ist Menü-1 und so weiter. |
menu-child-N | Jedes Untermenü der aktuellen Seiten, wobei das N für die RELATIVE Tiefe des Untermenüs steht, beginnend mit 0. |
Beispiel für HTML-Ausgabe:
<ul class="menu-top menu-0"> <li class="menu-0 menu-first"> ... </li> <li class="menu-0 menu-expand menu-parent"> ... <ul class="menu-1"> <li class="menu-1 menu-expand menu-first"> ... <ul class="menu-2"> <li class="menu-2 menu-first"> ... <li class="menu-2 menu-last"> ... </ul> </li> <li class="menu-1 menu-expand menu-parent"> ... <ul class="menu-2"> <li class="menu-2 menu-expand menu-current menu-first"> ... ** CURRENT PAGE ** <ul class="menu-3"> <li class="menu-3 menu-child menu-child-0 menu-first"> ... <ul class="menu-4"> <li class="menu-4 menu-child menu-child-1 menu-first"> ... </li> <li class="menu-4 menu-child menu-child-1 menu-last"> ... </li> </ul> </li> <li class="menu-3 menu-child menu-child-0 menu-last"> ... </li> </ul> </li> <li class="menu-2 menu-sibling menu-last"> ... </li> </ul> </li> <li class="menu-1"> ... </li> <li class="menu-1 menu-expand menu-last"> ... <ul class="menu-2"> <li class="menu-2 menu-first menu-last"> ... </li> </ul> </li> </ul> </li> <li class="menu-0 menu-last"> ... </li> </ul>
PARAMETERup
$aMenu
$AStart
SM2_ROOT+N
SM2_ROOT+1 Startet eine Ebene unterhalb der obersten Ebene
SM2_ROOT+2 Beginnt zwei Ebenen unterhalb der obersten Ebene
SM2_CURR+N
SM2_CURR+1 Startet eine Ebene unterhalb der aktuellen Ebene mit allen Unterebenen.
page_id
Alle Untermenüs dieser Seite werden angezeigt. (Die Seiten-ID kann durch Bearbeiten der Seite im Admin-Backend ermittelt werden, sie wird in der Adressleiste des Browsers angezeigt: http://SITE/admin/pages/modify.php?page_id=35
$ aMaxLevel
beginnt bei der in $AStart angegebenen Stufe bis zur hier angegebenen Stufe.
SM2_ALL
SM2_CURR+N
SM2_CURR+3 Alle übergeordneten + aktuellen + 3 Unterebenen
SM2_START+N
Die Ebenen werden unabhängig davon angezeigt, auf welcher Ebene sich die aktuelle Seite befindet.
SM2_START+1 Startebene + eine Ebene darunter.
SM2_MAX+N
Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
SM2_MAX+1 Die Startebene und eine Ebene darunter.
$ AOptions
Um beispielsweise sowohl TRIM als auch PRETTY zu definieren, verwenden Sie : (SM2_TRIM | SM2_PRETTY).
GRUPPE 1
——-
Aus dieser Gruppe muss immer ein Flag angegeben werden. Diese Flags bestimmen, wie die Geschwisterelemente im Menübaum in der Ausgabe unterdrückt werden.
SM2_ALL
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
Alle Untermenüs von Elementen, 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
-Menüpunkt und alle zu ihm führenden Menüpunkte.
A-1 -> B-2 -> C-2 (CURRENT)
SM2_SIBLING
A-1 -> B-2 -> C-1 -> C-2 (CURRENT) -> D-1 -> D-2 -> C-3
GRUPPE 2
——-
Diese Flags sind optional, sie können beliebig kombiniert werden.
SM2_NUMCLASS
SM2_ALLINFO
Dies verursacht einen ziemlich hohen Speicherverbrauch und sollte
daher mit Vorsicht verwendet werden.
Dies bedeutet zum Beispiel, dass die Schlüsselwörter, die Seitenbeschreibung und
alle anderen verfügbaren Informationen geladen werden können, die normalerweise nicht
sind.
Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2 gesetzt werden
kann für die jeweilige Menü-ID verwendet werden, oder in Verbindung mit dem
mit SM2_NOCACHE, sonst hat es keine Wirkung.
SM2_NOCACHE
SM2_PRETTY
Zeilenumbrüchen in eine lesbare Form. Dies ist besonders nützlich beim Debuggen der Menüausgabe.
SM2_BUFFER
SM2_CURRTREE
Es werden nur Menüpunkte des aktuellen Menüzweigs angezeigt.
Dieses Flag kann bei Bedarf mit jedem Flag aus Gruppe 1 kombiniert werden.
SM2_ESCAPE
Dies kann für ältere WebsiteBaker-Installationen erforderlich sein.
, um eine gültige HTML-Ausgabe zu generieren.
SM2_SHOWHIDDEN
Verwenden Sie private Seiten für die Zeit, in der Seiten ausgeblendet werden sollen, außer wenn sie aktiv sind. Geben Sie jedoch aus Gründen der Kompatibilität mit Release 4.8 dieses Flag an, damit ausgeblendete Seiten sichtbar werden, wenn sie aktiv sind.
SM2_XHTML_STRICT
SM2_NO_TITLE
Für diesen Parameter gibt es auch einen erweiterten Modus, in dem die Optionen als assoziatives Array übergeben werden. Weitere Informationen finden Sie im Abschnitt ERWEITERTE OPTIONEN. Für die meisten Anwendungen ist dies JEDOCH NICHT erforderlich.
$ aItemOpen
Wenn dieser Parameter auf false gesetzt ist, wird die Standardformatzeichenfolge
‚</a>‘ verwendet, um die Kompatibilität mit der WebsiteBaker-Standardfunktion show_menu() sicherzustellen.
Da die Formatierung mit CSS-Klassen oft einfacher ist, wenn sie auf das <a> -Tag angewendet wird, wird empfohlen, die folgende Formatzeichenfolge zu verwenden: ‚<li></a>‘.
Dieser Parameter kann auch als Instanz einer Formatierungsklasse für das Menü verwendet werden. Eine detailliertere Beschreibung finden Sie im Abschnitt FORMATIERER. Wenn hier ein Formatierer angegeben wird, werden alle Argumente nach $aItemOpen ignoriert.
$aItemClose
Wenn dieser Parameter auf false gesetzt ist, wird der Standardwert ‚</li>‘ verwendet.
$aMenuOpen
Wenn dieser Parameter auf false gesetzt ist, wird der Standardwert “ verwendet.
$aMenuClose
Wenn dieser Parameter auf false gesetzt ist, wird der Standardwert ‚</ul>‘ verwendet.
$aTopItemOpen
$aTopMenuOpen
ADVANCED OPTIONSup
Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array bereitgestellt werden.
Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als ‚flags‘ übergeben werden.
Dies definiert eine Anzahl von Ebenen, die immer relativ zu der in $AStart definierten Menüebene angezeigt werden. Dadurch wird das Flag SM2_TRIM für diese Ebenen ignoriert.
Um dieses Array zu verwenden, wird empfohlen, es zuerst zu erstellen und dann den Parameter $AOptions mit dem erstellten Array zu liefern:
$options = array('flags' => (SM2_TRIM|...), 'notrim' => 1); show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
FORMAT STRINGSup
Die folgenden Tags können in den Formatzeichenfolgen für $aItemOpen und $aMenuOpen verwendet werden und sollten durch den entsprechenden Text ersetzt werden.
< ein> -Tag ohne Klasse:
'<a href="" target="">' |
|
< ein> -Tag mit Klasse:
'<a href="" target="" class="">' |
|
< li> Tag mit Klasse:
'<li class="">' |
|
< ul> tag mit Klasse:
'<ul class="">' |
|
Liste der Klassen für diese Seite | |
Text des Menütitels (HTML-Entität maskiert, es sei denn, das SM2_NOESCAPE-Flag ist gesetzt) |
|
Die URL zu einer Bilddatei mit normaler Darstellung | |
Die URL zu einer Bilddatei mit aktiver / schwebender Anzeige | |
Seitentiteltext (HTML-Entität maskiert, es sei denn, das SM2_NOESCAPE Flag ist gesetzt) |
|
Die URL zu einer seitenbezogenen Bilddatei | |
Die URL der Seiten für das <a> -Tag | |
Das Seitenziel für das <a> -Tag | |
Die Seiten-ID des aktuellen Menüeintrags. | |
Die Seiten-ID des übergeordneten Menüelements. | |
Sie Seite Ebene, dies ist die gleiche Zahl in der „menu-N“ CSS-Tag verwendet. | |
Anzahl der Geschwister des aktuellen Menüeintrags. | |
Anzahl aller Geschwister in diesem Menü. | |
Bedingung (siehe Abschnitt „Bedingte Formatierung“ für Details) |
Die folgenden Tags sind NUR verfügbar, wenn das Flag SM2_ALLINFO gesetzt ist.
seitenbeschreibung | |
Schlüsselwörter der Seite |
Bedingte Formatierung up
Die Anweisung zur bedingten Formatierung kann eine der folgenden Formen annehmen:
B
Dies kann eine beliebige Zeichenfolge sein, die das Zeichen ‚}‘ nicht enthält.
kann enthalten. Es kann eine beliebige Formatzeichenfolge aus dem Abschnitt
Formatzeichenfolgen‘ enthalten, jedoch keinen weiteren Bedingungstest (da das Zeichen ‚}‘ nicht zulässig ist).
C
Dies kann eine beliebige Zeichenfolge sein, die das Zeichen ‚}‘ nicht enthält.
kann enthalten. Es kann eine beliebige Formatzeichenfolge aus dem Abschnitt
Formatzeichenfolgen‘ enthalten, jedoch keinen weiteren Bedingungstest (da das Zeichen ‚}‘ nicht zulässig ist).
Die Bedingung ist eine Kombination aus einem oder mehreren booleschen Vergleichen.
Wenn mehr als ein Vergleich erforderlich ist, muss er mit den anderen Vergleichen kombiniert werden
kann mit || (boolean or – OR) oder && (boolean and – AND) verknüpft werden.
Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten Operanden.
zB X == Y – wobei X der linke Operand ist, == der Operator und Y der rechte Operand.
class | Überprüfen Sie, ob diese Klasse existiert. Nur das „==“ und „!=“ operatoren sind erlaubt. In diesem Fall haben die Operatoren die Bedeutung „enthält“ oder „enthält nicht“ anstelle von „ist gleich“ oder „ist nicht gleich“. |
level | Überprüfen der Seitenebene. |
sib | Überprüfen Sie die Anzahl der Geschwister auf der aktuellen Seite. |
sibCount | Überprüfen Sie die Gesamtzahl der Geschwister im aktuellen Menü. |
id | Überprüfen Sie die Seiten-ID. |
ziel | Überprüfung der Zielspezifikation. |
< | Weniger als |
<= | Kleiner oder gleich |
== | Gleich |
!= | Ungleich |
>= | Größer oder gleich |
> | Größer als |
class | Einer der Klassennamen „menu-*“, wie im Abschnitt „Output“ angegeben. |
level | Überprüfen Sie die Seitenebene anhand der folgenden Werte:
|
id | Überprüfen Sie die Seiten-ID anhand der folgenden Werte:
|
sib | Eine positive ganze Zahl oder „sibCount“, um die Anzahl der Geschwister in diesem Menü zu überprüfen. |
sibCount | Eine positive ganze Zahl |
target | Eine Zeichenfolge, die eine mögliche Zielspezifikation darstellt. |
Hat ein Untermenü | |
Wenn der erste Eintrag in einem Menü | |
Ist NICHT das erste Element in einem Menü | |
Wenn der letzte Eintrag in einem Menü | |
Befindet sich auf der obersten Ebene | |
Ist NICHT auf der obersten Ebene | |
Wenn der zweite Eintrag in einem Menü | |
Wenn in einem Menü mit mehr als einem Eintrag | |
Ist in einem Menü das hat nicht genau 2 Artikel | |
Befindet sich in einem Geschwistermenü oder im Untermenü eines Geschwistermenüs | |
Ist der übergeordnete Punkt der aktuellen ID | |
Der String ‚_self‘ ist im target-Attribut enthalten. |
Wenn eine else-Klausel hinzugefügt wird, wird sie in allen anderen Fällen ausgeführt.
Zum Beispiel wird „foo“ immer ausgeführt, wenn die if-Prüfung falsch ist, also:
Ist NICHT der zweite Punkt im Menü | |
befindet sich NICHT in einem Menü mit mehr als zwei Einträgen |
ist der erste Eintrag ODER ist der vierte oder höhere Eintrag im Menü | |
Wenn der aktuelle Eintrag Untermenüs ist UND hat |
Bitte beachten Sie:
Alle Prüfungen werden in der Reihenfolge durchgeführt, in der sie vermerkt sind, da:
- Es gibt keine Prüfung auf mögliche Schleifen (alle Prüfungen werden immer ausgeführt).
- Prüfungen werden nicht gruppiert (Klammern von Prüfungen werden nicht unterstützt)
- Beide Dinge haben den gleichen Wert.
FORMATTERup
Achtung: Dies ist eine erweiterte und selten verwendete Funktion!
Mit umfangreichen Kenntnissen in der PHP-Programmierung ist es möglich, die vordefinierte
Formatierung von show_menu2 mit Ihrer eigenen zu verwenden.
Im include.php von show_menu2 Sie können sehen, wie Sie den Formatierer schreiben.
Die API, die verwendet werden muss, sieht folgendermaßen aus:
class SM2_Formatter{ // called once before any menu is processed to allow object initialization function initialize() { } // called to open the menu list function startList($aPage, $aUrl) { } // called to open the menu item function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { } // called to close the menu item function finishItem() { } // called to close the menu list function finishList() { } // called once after all menu has been processed to allow object finalization function finalize() { } // called once after finalize() if the SM2_NOOUTPUT flag is used function getOutput() { }};
Websitebakerist unter der GNU General Public License veröffentlicht