Project

General

Profile

1 1119 Ruebenwurz
show_menu2, version 4.9
2 845 doc
=======================
3 1351 Luisehahne
Ist ein Code-Snippet für das CMS Website Baker. Es stellt einen kompletten
4
Ersatz für die eingebaute Menüfuntionalität zur Verfügung. Alle, für die
5
Erzeugung des Menüs erforderlichen Daten, werden durch eine einzige
6
Datenbankabfrage erzeugt. Durch umfangreiche Anpassungsmöglichkeiten des
7
erzeugten HTML-Code können alle möglichen Menüarten (Listen, Breadcrumbs,
8 859 Ruebenwurz
Sitemaps, usw.) erzeugt werden.
9 845 doc
10
---
11 1351 Luisehahne
Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung
12
des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte
13 859 Ruebenwurz
eine Email an bjm@wwnw.de.
14 845 doc
---
15
16 859 Ruebenwurz
17
18 845 doc
INSTALLATION
19
============
20
1. Die aktuelle Version von http://code.jellycan.com/show_menu2/ herunterladen.
21
2. In das Admin-Backend der Website Baker Installation einlogen.
22
3. Erweiterungen -> Module aufrufen.
23 1351 Luisehahne
4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über
24 859 Ruebenwurz
   "Modul deinstallieren" auswählen und deinstallieren.
25 1351 Luisehahne
5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File
26 859 Ruebenwurz
   auswählen und installieren.
27 845 doc
28
29 859 Ruebenwurz
30 845 doc
BENUTZUNG VON SHOW_MENU2
31
========================
32 1351 Luisehahne
Um show_menu2 zu benutzen muss das verwendete Template an den Stellen
33
modifiziert werden, an denen das Menü erscheinen soll. Bitte beachten: Wenn alte
34
Menüaufrufe ersetzt werden, müssen unbedingt auch die entsprechenden neuen
35 859 Ruebenwurz
Parameter verwendet werden die show_menu2 benötigt.
36 845 doc
37 1351 Luisehahne
In den meisten Fällen genügt bereits der Standardaufruf ohne weitere Parameter
38
von show_menu2. In diesem Fall werden die Vorgabewerte verwendet, dies erzeugt
39 859 Ruebenwurz
ein Menü das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
40 845 doc
41 859 Ruebenwurz
    show_menu2();
42 845 doc
43 1351 Luisehahne
Bitte beachten: der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-
44
Codezeichen eingeschlossen werden (ausser der Aufruf erfolgt bereits innerhalb
45 859 Ruebenwurz
von PHP Code):
46 845 doc
47
    <?php show_menu2(); ?>
48
49 1351 Luisehahne
Dieses Vorgabe Menü erzeugt bereits ein komplettes Menü auf Listenbasis mit
50
etlichen Klassen, die eine leichte Formatierung mittels CSS ermöglichen. Es wird
51
z.B. die Klasse "menu-current" zu dem <li> tag des aktuellen Menüpunktes
52
hinzugefügt. Zusätzlich erhält jeder Menüpunkt der Unterpunkte enthält die
53
Klasse "menu-expand". Das erlaubt es sehr differenzierte CSS Regeln für die
54 859 Ruebenwurz
einzelnen Menüpunkte aufzustellen.
55 845 doc
Zum Beispiel:
56
57
    li.menu-expand  { font-weight: bold; }
58
    li.menu-current { background: red; }
59
60 1351 Luisehahne
Im Abschnitt "HTML-Ausgabe" findet sich eine detaillierte Beschreibung welche
61
Klassen welchem Element zugeordnet werden. Durch die Verwendung von
62
verschiedenen Parametern bei dem show_menu2 Funktionsaufruf lassen sich auch
63
recht umfangreiche und unterschiedliche Menüstrukturen erzeugen. Um
64
beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur
65 859 Ruebenwurz
darzustellen, könnte man folgenden Aufruf verwenden:
66 845 doc
67
    show_menu2(0, SM2_ROOT, SM2_START);
68
69
Oder um beispielsweise bis zu zwei Unterebenen der aktuellen Seite anzuzeigen:
70
71
    show_menu2(0, SM2_CURR+1, SM2_CURR+2);
72
73 1351 Luisehahne
Es gibt jede Menge Möglichkeiten, um die unterschiedlichsten Menüstrukturen zu
74
erzeugen. Zahlreiche Beispiele dazu findet man auf der Demo-Website: http://
75 859 Ruebenwurz
code.jellycan.com/sm2test/
76 845 doc
77
78 859 Ruebenwurz
79
HÄUFIGE FRAGEN
80
==============
81
82
Q:  Ich bin kein Programmierer. Gibt es keine einfachere Dokumentation?
83
A:  Nein, denn dies hier ist bereits die einfache Dokumentation.
84
85
86
Q:  Wie kann ich ein sogenanntes Drop-Down Menü erstellen?
87 1351 Luisehahne
A:  Dies hat nichts mit show_menu2 zu tun. Um ein Drop-Down Menü zu erzeugen muß
88
    lediglich der CSS-Code des jeweiligen Templates angepaßt werden. Die nötigen
89
    Anpassungen findet man z.B. im "allcss2" Template aus dem WB Addon
90 859 Ruebenwurz
    Repository -> http://addons.websitebaker.org/pages/templates.php
91
92
93 1351 Luisehahne
Q:  Warum verschwindet das Menü nachdem ich in einer mehrsprachigen WB-Site die
94 859 Ruebenwurz
    Suchfunktion benutzt habe?
95 1351 Luisehahne
A:  Im verwendeten Template fehlen die notwendigen Zeilen:
96
97
    1.  Im WB Admin Backend: Optionen -> Erweiterte Optionen anzeigen ->
98
        Suchoptionen -> Kopfzeile - hier direkt nach dem öffnenden <form> tag
99
        folgende Zeile einfügen:
100
101 859 Ruebenwurz
        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
102
103 1351 Luisehahne
    2.  In der index.php des verwendeten Templates folgende Zeile unmittelbar
104
        nach dem öffnenden <form> tag der Suche einfügen:
105
106 859 Ruebenwurz
        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
107
108
109
Q:  Mehrsprachig? Das klingt toll. Wie macht man das?
110
A:  http://help.websitebaker.org/pages/de/advanced-doku/designer-guide/mehrsprachige-webseiten.php
111
112
113
Q:  Jedesmal wenn eine Seite aufgerufen wird, erzeugt SM2 folgende Warnmeldung:
114
    "show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!"
115 1351 Luisehahne
A:  Der Funktion wurden die falschen Werte oder eine falsche Anzahl an
116
    Werten übergeben.
117
    Siehe den Abschnitt PARAMETER für die korrekten Flag Werte die dem
118 859 Ruebenwurz
    $aOptions Parameter zu übergeben sind.
119
120
121 971 Ruebenwurz
Q:  How do I use a different class/picture/color/widget for each entry in a menu?
122
A:  Use the [page_id] format string in the $aItemOpen string. Create a unique
123
    class or id for each menu item, then reference that item in your CSS or Javascript
124
    to do whatever you want.
125 859 Ruebenwurz
126 971 Ruebenwurz
    To add a unique class for each menu item (or similar):
127
128
        "<li><a href="[url]" target="[target]" class="[class] p[page_id]">[menu_title]</a>"
129
130
        ... creating menu items like ...
131
132
        <li><a href="/pages/foo/bar.php" target="_top" class="menu-top p45">Top Menu</a>
133
134
        Reference this in your CSS like:
135
136
        a.p45 { color: red; }
137
138
    To add a unique ID for each menu item (or similar):
139
140
        "<li><a id="p[page_id]" href="[url]" target="[target]" class="[class]">[menu_title]</a>"
141
142
        ... creating menu items like ...
143
144
        <li><a id="p45" href="/pages/foo/bar.php" target="_top" class="menu-top">Top Menu</a>
145
146
        Reference this in your CSS like:
147
148
        a#p45 { color: red; }
149
150
        Note that the ID can only be used if that menu is generated and displayed one time
151
        only on the page (because HTML ID's must be unique within a page).
152
153
154 845 doc
FUNKTION
155
========
156 859 Ruebenwurz
157 845 doc
Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
158
159
    show_menu2(
160
        $aMenu          = 0,
161
        $aStart         = SM2_ROOT,
162
        $aMaxLevel      = SM2_CURR+1,
163 859 Ruebenwurz
        $aOptions       = SM2_TRIM,
164 845 doc
        $aItemOpen      = '[li][a][menu_title]</a>',
165
        $aItemClose     = '</li>',
166
        $aMenuOpen      = '[ul]',
167
        $aMenuClose     = '</ul>',
168
        $aTopItemOpen   = false,
169
        $aTopMenuOpen   = false
170
        )
171
172 1351 Luisehahne
Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes
173
einzelnen Parameters.
174
Jeder Parameter muß absolut korrekt verwendet werden. Folgende Regeln können
175 859 Ruebenwurz
dabei helfen:
176 845 doc
177 859 Ruebenwurz
    $aMenu = 0 ist in den meisten Anwendungsfällen der beste Wert.
178
179
    $aStart muß entweder eine page ID oder ein Wert der mit "SM2_" beginnt sein.
180
181
    $aMaxLevel kann nur Werte erhalten, die mit "SM2_" beginnen.
182
183 1351 Luisehahne
    $aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit
184 859 Ruebenwurz
    "SM2_" beginnen zulässig.
185
186 1351 Luisehahne
    Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs
187 859 Ruebenwurz
    steuern.
188
189 1351 Luisehahne
    Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den
190 859 Ruebenwurz
    jeweiligen Vorgabewert zu erhalten.
191 845 doc
192 1351 Luisehahne
    Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu
193
    erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte
194 859 Ruebenwurz
    Verwendung finden:
195 845 doc
196 859 Ruebenwurz
        show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
197 845 doc
198 859 Ruebenwurz
Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
199
200
201 845 doc
HTML-AUSGABE
202
============
203 859 Ruebenwurz
Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden.
204
Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei
205
einzelne Menüpunkte, wenn es erforderlich ist, auch mehrere Klassen erhalten können.
206 845 doc
207 859 Ruebenwurz
    KLASSE          ZUORDNUNG
208 845 doc
    ------------    -------------------------------------------------------
209 859 Ruebenwurz
    menu-top        Nur der erste Menüpunkt.
210 845 doc
    menu-parent     Jeder Hauptmenüpunkt.
211
    menu-current    Nur der Menüpunkt der aktuellen Seite.
212
    menu-sibling    Alle "Geschwister" der aktuellen Seite.
213
    menu-child      Jedes Untermenü der aktuellen Seite.
214
    menu-expand     Jedes Menü das Untermenüs hat.
215
    menu-first      Der erste Punkt eines jeden Menüs oder Untermenüs.
216
    menu-last       Der letzte Punkt eines jeden Menüs oder Untermenüs.
217
218 1351 Luisehahne
    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLASS Flag gesetzt
219 859 Ruebenwurz
    ist:
220 845 doc
221
    menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe,
222 859 Ruebenwurz
                    beginnend bei 0, des jeweiligen Menüpunktes steht.
223 845 doc
                    Die oberste Ebene ist also immer menu-0, die nächste
224
                    Ebene menu-1 usw.
225
    menu-child-N    Jedes Untermenü der aktuellen Seiten, wobei das N für die
226
                    RELATIVE Tiefe des Untermenüs, beginnend bei 0, steht.
227
228
Beispiel einer HTML-Ausgabe:
229
230
<ul class="menu-top menu-0">
231
  <li class="menu-0 menu-first">  ... </li>
232
  <li class="menu-0 menu-expand menu-parent">  ...
233
  <ul class="menu-1">
234
    <li class="menu-1 menu-expand menu-first">  ...
235
    <ul class="menu-2">
236
      <li class="menu-2 menu-first">  ...
237
      <li class="menu-2 menu-last">  ...
238
    </ul>
239
    </li>
240
    <li class="menu-1 menu-expand menu-parent">  ...
241
    <ul class="menu-2">
242
      <li class="menu-2 menu-expand menu-current menu-first">  ...      ** CURRENT PAGE **
243
      <ul class="menu-3">
244
        <li class="menu-3 menu-child menu-child-0 menu-first">  ...
245
        <ul class="menu-4">
246
          <li class="menu-4 menu-child menu-child-1 menu-first">  ... </li>
247
          <li class="menu-4 menu-child menu-child-1 menu-last">  ... </li>
248
        </ul>
249
        </li>
250
        <li class="menu-3 menu-child menu-child-0 menu-last">  ... </li>
251
      </ul>
252
      </li>
253
      <li class="menu-2 menu-sibling menu-last">  ... </li>
254
    </ul>
255
    </li>
256
    <li class="menu-1">  ... </li>
257
    <li class="menu-1 menu-expand menu-last">  ...
258
    <ul class="menu-2">
259
      <li class="menu-2 menu-first menu-last">  ... </li>
260
    </ul>
261
    </li>
262
  </ul>
263
  </li>
264
  <li class="menu-0 menu-last">  ... </li>
265
</ul>
266
267
268
PARAMETER
269
=========
270
$aMenu
271 1351 Luisehahne
    Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu
272 859 Ruebenwurz
    verwenden.
273 845 doc
    Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
274
    im System verwendeten Menüs zurück.
275
276
$aStart
277 1351 Luisehahne
    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den
278
    meisten Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es
279 859 Ruebenwurz
    kann einer der folgenden Werte verwendet werden:
280 845 doc
281
        SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
282 859 Ruebenwurz
                    SM2_ROOT      Beginnt auf der obersten Ebene
283
                    SM2_ROOT+1    Beginnt eine Ebene unterhalb der obersten Ebene
284
                    SM2_ROOT+2    Beginnt zwei Ebenen unterhalb der obersten Ebene
285 845 doc
286
        SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
287 859 Ruebenwurz
                    SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
288
                                  der aktuellen Ebene
289
                    SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
290
                                  mit allen Unterebenen
291 845 doc
292
        page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
293 1351 Luisehahne
                    Alle Untermenüs dieser Seite werden angezeigt.
294
                    (Die page id kann ermittelt werden, wenn man die Seite im
295
                    Admin-Backend editiert, sie steht dann in der Adresszeile des
296 859 Ruebenwurz
                    Browsers: http://SITE/admin/pages/modify.php?page_id=35
297 845 doc
298
$aMaxLevel
299 859 Ruebenwurz
    Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
300
    beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier
301 845 doc
    festgelegten Ebene.
302
303 859 Ruebenwurz
        SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
304 845 doc
305
        SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen.
306 859 Ruebenwurz
                     SM2_CURR      Aktuelle Ebene (keine Unterebene)
307
                     SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
308 845 doc
309
        SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
310 859 Ruebenwurz
                     Die Ebenen werden unabhängig davon angezeigt,egal
311 845 doc
                     auf welcher Ebene sich die aktuelle Seite befindet.
312 859 Ruebenwurz
                     SM2_START     Eine einzelne Ebene ab der Startebene.
313
                     SM2_START+1   Startebene + eine Ebene darunter.
314 845 doc
315
        SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
316
                     Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
317 859 Ruebenwurz
                     SM2_MAX       Nur die Startebene (gleiche Wirkung wie SM2_START)
318
                     SM2_MAX+1     Die Startebene und eine Ebene darunter.
319 845 doc
320 859 Ruebenwurz
$aOptions
321 845 doc
    Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
322
    einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
323 859 Ruebenwurz
    sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
324 845 doc
325
    GROUP 1
326
    -------
327
    Aus dieser Gruppe muss stets genau ein Flag angegeben werden. Diese Flags
328
    bestimmen auf welche Weise die Geschwisterelemente im Menübaum in der
329
    Ausgabe unterdrückt werden.
330
331
    SM2_ALL         Zeigt alle Zweige des Menübaums
332
                        A-1 -> B-1
333
                            -> B-2 -> C-1
334
                                   -> C-2 (CURRENT)
335
                                          -> D-1
336
                                          -> D-2
337
                                   -> C-3
338
                        A-2 -> B-3
339
                            -> B-4
340
341
    SM2_TRIM        Zeigt alle Geschwistermenüs der Seite im aktuellen Pfad.
342
                    Alle Untermenüs von Elemnten die sich nicht im Pfad befinden
343
                    werden entfernt.
344
                        A-1 -> B-1
345
                            -> B-2 -> C-1
346
                                   -> C-2 (CURRENT)
347
                                          -> D-1
348
                                          -> D-2
349
                                   -> C-3
350
                        A-2
351
352
    SM2_CRUMB       Zeigt den Breadcrumb Pfad des Menüs an, also den aktuellen
353
                    Menüpunkt sowie alle Menüpunkte die dorthin führen.
354
                        A-1 -> B-2 -> C-2 (CURRENT)
355
356
    SM2_SIBLING     Wie SM2_TRIM, es werden aber nur Geschwistermenüs der aktuellen
357
                    Seite angezeigt. Alle anderen Punkte werden unterdrückt.
358
                        A-1 -> B-2 -> C-1
359
                                   -> C-2 (CURRENT)
360
                                          -> D-1
361
                                          -> D-2
362
                                   -> C-3
363
364
    GROUP 2
365
    -------
366
    Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
367
368 859 Ruebenwurz
    SM2_NUMCLASS    Fügt die nummerierten Menüklassen "menu-N" und
369 845 doc
                    "menu-child-N hinzu.
370
371
    SM2_ALLINFO     Lädt alle Felder aus der Seitentabelle der Datenbank.
372
                    Dies verursacht einen ziemlich hohen Speicherverbauch und sollte
373
                    deshalb nur mit Bedacht verwendet werden.
374
                    Dadurch werden z.B. die Keywords, die Seitenbeschreibung sowie
375
                    all die anderen Informationen verfügbar, die normalerweise nicht
376
                    geladen werden.
377
                    Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2
378
                    für die jeweilige Menü ID verwendet werden, oder in Verbindung
379
                    mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
380
381
    SM2_NOCACHE     Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
382 1351 Luisehahne
                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank
383 859 Ruebenwurz
                    gelesen.
384 845 doc
385
    SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
386 1351 Luisehahne
                    Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders
387 859 Ruebenwurz
                    nützlich beim Debuggen der Menüausgabe.
388 845 doc
389
    SM2_BUFFER      Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
390 859 Ruebenwurz
                    zwischen und gibt ihn als kompletten String aus.
391 845 doc
392
    SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
393
                    Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
394 859 Ruebenwurz
                    Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
395 845 doc
                    kombiniert werden.
396
397
    SM2_ESCAPE      Wendet htmlspecialchars auf den Menüstring an.
398
                    Dies kann bei älteren Websitebaker Installationen erforderlich
399
                    sein um eine valide HTML Ausgabe zu erzeugen.
400
401 1119 Ruebenwurz
    SM2_SHOWHIDDEN  Hidden pages are usually hidden all of the time, including
402
                    when they are active (i.e. current page or a parent page).
403
                    Use private pages for time when you want pages to be
404
                    hidden except when active. However for compatibility with
405
                    release 4.8, supply this flag to enable hidden pages to
406
                    become visible when they are active.
407 845 doc
408 1351 Luisehahne
    SM2_XHTML_STRICT	Stellt die XHTML-Kompatibilität der Links sicher indem
409
					in per [a] oder [ac] formatierten Links die Targetangabe
410
					entfernt und das Argument title="[page_titel]" eingefügt
411
					wird. Bei manuell zusammengestellten Links ist der Designer
412
					selbst für die XHTML-Konformität zuständig.
413
414
	SM2_NO_TITLE	Unterdrückt die Ausgabe des Inhaltes des Title-Attributes
415 1360 Luisehahne
					bei [a] oder [ac] formatierten links. Im XHTML-Strikt Modus
416
                    wird 'title' mit einen &nbsp; ausgegeben.
417 1351 Luisehahne
418
    Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
419
    als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
420
    OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
421 859 Ruebenwurz
422 845 doc
$aItemOpen
423
    Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
424
    wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
425
    Formatstring definiert werden.
426
    Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
427 859 Ruebenwurz
    '[li][a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
428
    Standardfunktion show_menu() zu gewährleisten.
429 845 doc
    Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den
430 859 Ruebenwurz
    <a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
431 845 doc
    verwenden: '<li>[ac][menu_title]</a>'.
432
433
    Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
434 1351 Luisehahne
    verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER.
435 859 Ruebenwurz
    Wenn hier ein Formatter angegeben wird, werden alle Argumente
436
    nach $aItemOpen ignoriert.
437 845 doc
438
$aItemClose
439 859 Ruebenwurz
    Dieser String schließt jeden Menüpunkt ab.
440 845 doc
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
441
    ersetzt!
442
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
443
444
$aMenuOpen
445
    Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
446
    Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
447
    werden.
448
    Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
449
    verwendet.
450
451
$aMenuClose
452 859 Ruebenwurz
    Dieser String schließt jedes Menü ab.
453 845 doc
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
454
    ersetzt!
455
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
456
457
$aTopItemOpen
458
    Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
459
    gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
460
461
$aTopMenuOpen
462
    Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
463
    gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
464
465 859 Ruebenwurz
466 845 doc
467 859 Ruebenwurz
ERWEITERTE OPTIONEN
468 1351 Luisehahne
===================
469
Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben
470
im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten
471
Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen
472
ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array
473
bereitgestellt werden.
474
Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als 'flags'
475
übergeben werden.
476 859 Ruebenwurz
477 1351 Luisehahne
    'flags'     **ZWINGEND ERFORDELICH** Dies sind die Flags die oben im Abschnitt
478 859 Ruebenwurz
                PARAMETER unter $aOptions beschrieben wurden.
479
480 1351 Luisehahne
    'notrim'    Hiermit wird eine Anzahl von Ebenen festegelegt, die relativ bezogen
481
                auf die in $aStart festgelegte Menüebene, immer angezeigt werden. Dies
482
                bewirkt, daß für diese Ebenen das SM2_TRIM Flag ignoriert wird.
483
484
Um dieses Array zu verwenden, empfiehlt es sich es erst anzulegen und dann den
485 859 Ruebenwurz
$aOptions parameter mit dem angelegten Array zu beliefern:
486
487
    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
488
    show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
489
490
491
492 845 doc
FORMAT STRINGS
493
==============
494
Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
495 859 Ruebenwurz
verwendet werden und sollen durch den entsprechenden Text ersetzt werden.
496 845 doc
497
[a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
498
[ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
499
[li]            <li> tag mit Klasse:   '<li class="[class]">'
500
[ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
501
[class]         Liste der Klassen für diese Seite
502 1351 Luisehahne
[menu_title]    Text des Menütitel
503 859 Ruebenwurz
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
504 1681 darkviper
[menu_icon_0]	die URL zu einer Bilddatei mit normal - Darstellung (ab WB2.8.4)
505
[menu_icon_1]	die URL zu einer Bilddatei mit active/hover - Darstellung (ab WB2.8.4)
506 1351 Luisehahne
[page_title]    text des Seitentitel
507 859 Ruebenwurz
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
508 1681 darkviper
[page_icon]		die URL zu einer seitenbezogenen Bilddatei (ab WB2.8.4)
509
[tooltip]       Tooltip-Text, der normal im title-Attribut der Links ausgegeben wird (ab WB2.8.4)
510 845 doc
[url]           die URL der Seiten für den <a> tag
511
[target]        das Seitenziel für den <a> tag
512 859 Ruebenwurz
[page_id]       die Page ID des aktuellen Menüpunktes.
513
[parent]        die Page ID des übergeordneten Menüpunktes.
514 1351 Luisehahne
[level]         die Seitenebene,
515 859 Ruebenwurz
                dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
516
[sib]           Anzahl der Geschwister des aktuellen Menüpunktes.
517
[sibCount]      Anzahl aller Geschwister in diesem Menü.
518 845 doc
[if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
519
520 859 Ruebenwurz
Folgende tags sind NUR verfügbar, wenn das SM2_ALLINFO Flag gesetzt ist.
521 845 doc
522
[description]   Seitenbeschreibung
523
[keywords]      Schlüsselworte der Seite
524
525
526 859 Ruebenwurz
527 845 doc
BEDINGTE FORMATIERUNG
528
=====================
529
Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
530
531
    [if(A){B}]
532
    [if(A){B}else{C}]
533
534
    A   Die Bedingung. Details dazu, siehe unten.
535
536
    B   Der Ausdruck der verwendet wird, wenn die Bedingung erfüllt ist.
537
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
538
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
539
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
540
        Zeichen '}' nicht erlaubt ist).
541
542
    C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
543 859 Ruebenwurz
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
544 845 doc
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
545
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
546
        Zeichen '}' nicht erlaubt ist).
547
548
Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
549
Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
550 859 Ruebenwurz
mittels || (boolsches oder - OR) oder && (boolsches und - AND) verknüpft werden.
551 845 doc
552 1351 Luisehahne
Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten
553 859 Ruebenwurz
Operanden.
554 845 doc
z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
555
556
    Linker Operand. Muss eines der folgende Schlüsselworte sein:
557
        class       Überprüfung ob diese Klasse existiert. Es sind nur die
558
                    "==" and "!=" Operatoren erlaubt. In diesem Fall haben die Operatoren
559
                    die Bedeutung von "enthält" bzw. "enthält nicht" an Stelle von
560
                    "ist gleich" bzw. "ist nicht gleich"
561
        level       Überprüfung der Seitenebene.
562
        sib         Überprüfung der Geschwisteranzahl der aktuellen Seite.
563
        sibCount    Überprüfung der Geamtanzahl der Geschwister im aktuellen Menü.
564
        id          Überprüfung der page id.
565 1351 Luisehahne
		target		Überprüfung der Target-Angabe
566 845 doc
567
    Operator. Muss einer der folgenden sein:
568
        <           Kleiner als
569
        <=          Kleiner oder gleich als
570
        ==          Gleich
571
        !=          Nicht gleich
572
        >=          Grössr oder gleich als
573 859 Ruebenwurz
        >           Grösser als
574 845 doc
575
    Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
576
                     verwendeten Schlüsselwort ab.
577
        class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
578
                    spezifiziert sind.
579
        level       Überprüfung der Seitenebene gegen folgende Werte:
580 859 Ruebenwurz
                        <number>  die absolute Seitenebene
581
                        root      die oberste Seitenebene
582
                        granny    die Seitenebene über der übergeordneten Seitenebene
583
                        parent    die übergeordnete Seitenebene
584
                        current   die aktuelle Seitenebene
585
                        child     die untergeornete Seitenebene
586 845 doc
        id          Überprüfung der page id gegen folgende Werte:
587 859 Ruebenwurz
                        <number>  die absolute page id
588
                        parent    die übergeordnete page id
589
                        current   die aktuelle page id
590 845 doc
        sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
591
                    Geschwister in diesem Menü zu überprüfen
592
        sibCount    Eine positive Integerzahl
593 1351 Luisehahne
		target		Ein String, der eine mögliche Targetangabe darstellt
594 845 doc
595
Folgende Beispiele ergeben "wahr" und der Ausdruck {exp} wird ausgeführt, wenn zutrifft:
596
597
    [if(class==menu-expand){exp}]   hat ein Untermenü
598
    [if(class==menu-first){exp}]    ist der erste Eintrag in einem Menü
599
    [if(class!=menu-first){exp}]    ist NICHT der erste Eintrag in einem Menü
600
    [if(class==menu-last){exp}]     ist der letzte Eintrag in einem Menü
601
    [if(level==0){exp}]             befindet sich auf der obersten Ebene
602
    [if(level>0){exp}]              befindet sich NICHT auf der obersten Ebene
603
    [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
604
    [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
605
    [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
606 1351 Luisehahne
    [if(level>parent){exp}]         ist in einem Geschwistermenü oder dem Untermenü eines
607 859 Ruebenwurz
                                    Geschwistermenüs
608 845 doc
    [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
609 1351 Luisehahne
	[if(target==_self){exp}]		im Target-Attribut ist der String '_self' enthalten
610 845 doc
611 1351 Luisehahne
Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen
612 859 Ruebenwurz
ausgeführt.
613 845 doc
Zum Beispiel wird "foo" immer dann ausgeführt, wenn die if Überprüfung falsch ergibt, also:
614
615
    [if(sib==2){exp}else{foo}]      ist NICHT der zweite Eintrag im Menü
616
    [if(sibCount>2){exp}else{foo}]  ist NICHT in einem Menü mit mehr als zwei Einträgen
617
618
Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
619
620 1351 Luisehahne
    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere
621 859 Ruebenwurz
    Eintrag im Menü
622 845 doc
623 1351 Luisehahne
    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat
624 859 Ruebenwurz
    Untermenüs
625 845 doc
626
Bitte beachten:
627
Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
628
* es findet keine Überprüfung auf evtl. Schleifen statt (alle Überprüfungen werden immer ausgeführt)
629
* Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
630
* sowohl || als auch && haben die gleiche Wertigkeit
631
632 859 Ruebenwurz
633
634 845 doc
FORMATTER
635
=========
636
Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
637
638
Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
639
Formatierer von show_menu2 mit einem eigenen zu ersetzen.
640
In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
641 859 Ruebenwurz
Die API, die verwendet werden muss, sieht wie folgt aus:
642 845 doc
643 859 Ruebenwurz
(Anmerkung des Übersetzers: Kommentare sind nicht übersetzt, wer sich so weit vorwagt, sollte
644 845 doc
damit keine Probleme haben ;-)
645
646
class SM2_Formatter
647
{
648
    // called once before any menu is processed to allow object initialization
649
    function initialize() { }
650
651
    // called to open the menu list
652
    function startList($aPage, $aUrl) { }
653
654
    // called to open the menu item
655
    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
656
657
    // called to close the menu item
658
    function finishItem() { }
659
660
    // called to close the menu list
661
    function finishList() { }
662
663
    // called once after all menu has been processed to allow object finalization
664
    function finalize() { }
665
666
    // called once after finalize() if the SM2_NOOUTPUT flag is used
667
    function getOutput() { }
668
};