Project

General

Profile

1 859 Ruebenwurz
show_menu2, version 4.7
2 845 doc
=======================
3 859 Ruebenwurz
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
Sitemaps, usw.) erzeugt werden.
9 845 doc
10
---
11 859 Ruebenwurz
Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung
12
des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte
13
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 859 Ruebenwurz
4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über
24
   "Modul deinstallieren" auswählen und deinstallieren.
25
5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File
26
   auswählen und installieren.
27 845 doc
28
29 859 Ruebenwurz
30 845 doc
BENUTZUNG VON SHOW_MENU2
31
========================
32 859 Ruebenwurz
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
Parameter verwendet werden die show_menu2 benötigt.
36 845 doc
37 859 Ruebenwurz
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
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 859 Ruebenwurz
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
von PHP Code):
46 845 doc
47
    <?php show_menu2(); ?>
48
49 859 Ruebenwurz
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
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 859 Ruebenwurz
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
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 859 Ruebenwurz
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
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
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
    Repository -> http://addons.websitebaker.org/pages/templates.php
91
92
93
Q:  Warum verschwindet das Menü nachdem ich in einer mehrsprachigen WB-Site die
94
    Suchfunktion benutzt habe?
95
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
        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
102
103
    2.  In der index.php des verwendeten Templates folgende Zeile unmittelbar
104
        nach dem öffnenden <form> tag der Suche einfügen:
105
106
        <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
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
    $aOptions Parameter zu übergeben sind.
119
120
121
122 845 doc
FUNKTION
123
========
124 859 Ruebenwurz
125 845 doc
Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
126
127
    show_menu2(
128
        $aMenu          = 0,
129
        $aStart         = SM2_ROOT,
130
        $aMaxLevel      = SM2_CURR+1,
131 859 Ruebenwurz
        $aOptions       = SM2_TRIM,
132 845 doc
        $aItemOpen      = '[li][a][menu_title]</a>',
133
        $aItemClose     = '</li>',
134
        $aMenuOpen      = '[ul]',
135
        $aMenuClose     = '</ul>',
136
        $aTopItemOpen   = false,
137
        $aTopMenuOpen   = false
138
        )
139
140 859 Ruebenwurz
Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes
141
einzelnen Parameters.
142
Jeder Parameter muß absolut korrekt verwendet werden. Folgende Regeln können
143
dabei helfen:
144 845 doc
145 859 Ruebenwurz
    $aMenu = 0 ist in den meisten Anwendungsfällen der beste Wert.
146
147
    $aStart muß entweder eine page ID oder ein Wert der mit "SM2_" beginnt sein.
148
149
    $aMaxLevel kann nur Werte erhalten, die mit "SM2_" beginnen.
150
151
    $aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit
152
    "SM2_" beginnen zulässig.
153
154
    Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs
155
    steuern.
156
157
    Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den
158
    jeweiligen Vorgabewert zu erhalten.
159 845 doc
160 859 Ruebenwurz
    Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu
161
    erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte
162
    Verwendung finden:
163 845 doc
164 859 Ruebenwurz
        show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
165 845 doc
166 859 Ruebenwurz
Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
167
168
169 845 doc
HTML-AUSGABE
170
============
171 859 Ruebenwurz
Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden.
172
Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei
173
einzelne Menüpunkte, wenn es erforderlich ist, auch mehrere Klassen erhalten können.
174 845 doc
175 859 Ruebenwurz
    KLASSE          ZUORDNUNG
176 845 doc
    ------------    -------------------------------------------------------
177 859 Ruebenwurz
    menu-top        Nur der erste Menüpunkt.
178 845 doc
    menu-parent     Jeder Hauptmenüpunkt.
179
    menu-current    Nur der Menüpunkt der aktuellen Seite.
180
    menu-sibling    Alle "Geschwister" der aktuellen Seite.
181
    menu-child      Jedes Untermenü der aktuellen Seite.
182
    menu-expand     Jedes Menü das Untermenüs hat.
183
    menu-first      Der erste Punkt eines jeden Menüs oder Untermenüs.
184
    menu-last       Der letzte Punkt eines jeden Menüs oder Untermenüs.
185
186 859 Ruebenwurz
    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLASS Flag gesetzt
187
    ist:
188 845 doc
189
    menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe,
190 859 Ruebenwurz
                    beginnend bei 0, des jeweiligen Menüpunktes steht.
191 845 doc
                    Die oberste Ebene ist also immer menu-0, die nächste
192
                    Ebene menu-1 usw.
193
    menu-child-N    Jedes Untermenü der aktuellen Seiten, wobei das N für die
194
                    RELATIVE Tiefe des Untermenüs, beginnend bei 0, steht.
195
196
Beispiel einer HTML-Ausgabe:
197
198
<ul class="menu-top menu-0">
199
  <li class="menu-0 menu-first">  ... </li>
200
  <li class="menu-0 menu-expand menu-parent">  ...
201
  <ul class="menu-1">
202
    <li class="menu-1 menu-expand menu-first">  ...
203
    <ul class="menu-2">
204
      <li class="menu-2 menu-first">  ...
205
      <li class="menu-2 menu-last">  ...
206
    </ul>
207
    </li>
208
    <li class="menu-1 menu-expand menu-parent">  ...
209
    <ul class="menu-2">
210
      <li class="menu-2 menu-expand menu-current menu-first">  ...      ** CURRENT PAGE **
211
      <ul class="menu-3">
212
        <li class="menu-3 menu-child menu-child-0 menu-first">  ...
213
        <ul class="menu-4">
214
          <li class="menu-4 menu-child menu-child-1 menu-first">  ... </li>
215
          <li class="menu-4 menu-child menu-child-1 menu-last">  ... </li>
216
        </ul>
217
        </li>
218
        <li class="menu-3 menu-child menu-child-0 menu-last">  ... </li>
219
      </ul>
220
      </li>
221
      <li class="menu-2 menu-sibling menu-last">  ... </li>
222
    </ul>
223
    </li>
224
    <li class="menu-1">  ... </li>
225
    <li class="menu-1 menu-expand menu-last">  ...
226
    <ul class="menu-2">
227
      <li class="menu-2 menu-first menu-last">  ... </li>
228
    </ul>
229
    </li>
230
  </ul>
231
  </li>
232
  <li class="menu-0 menu-last">  ... </li>
233
</ul>
234
235
236
PARAMETER
237
=========
238
$aMenu
239 859 Ruebenwurz
    Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu
240
    verwenden.
241 845 doc
    Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
242
    im System verwendeten Menüs zurück.
243
244
$aStart
245 859 Ruebenwurz
    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den
246
    meisten Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es
247
    kann einer der folgenden Werte verwendet werden:
248 845 doc
249
        SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
250 859 Ruebenwurz
                    SM2_ROOT      Beginnt auf der obersten Ebene
251
                    SM2_ROOT+1    Beginnt eine Ebene unterhalb der obersten Ebene
252
                    SM2_ROOT+2    Beginnt zwei Ebenen unterhalb der obersten Ebene
253 845 doc
254
        SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
255 859 Ruebenwurz
                    SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
256
                                  der aktuellen Ebene
257
                    SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
258
                                  mit allen Unterebenen
259 845 doc
260
        page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
261 859 Ruebenwurz
                    Alle Untermenüs dieser Seite werden angezeigt.
262
                    (Die page id kann ermittelt werden, wenn man die Seite im
263
                    Admin-Backend editiert, sie steht dann in der Adresszeile des
264
                    Browsers: http://SITE/admin/pages/modify.php?page_id=35
265 845 doc
266
$aMaxLevel
267 859 Ruebenwurz
    Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
268
    beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier
269 845 doc
    festgelegten Ebene.
270
271 859 Ruebenwurz
        SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
272 845 doc
273
        SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen.
274 859 Ruebenwurz
                     SM2_CURR      Aktuelle Ebene (keine Unterebene)
275
                     SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
276 845 doc
277
        SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
278 859 Ruebenwurz
                     Die Ebenen werden unabhängig davon angezeigt,egal
279 845 doc
                     auf welcher Ebene sich die aktuelle Seite befindet.
280 859 Ruebenwurz
                     SM2_START     Eine einzelne Ebene ab der Startebene.
281
                     SM2_START+1   Startebene + eine Ebene darunter.
282 845 doc
283
        SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
284
                     Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
285 859 Ruebenwurz
                     SM2_MAX       Nur die Startebene (gleiche Wirkung wie SM2_START)
286
                     SM2_MAX+1     Die Startebene und eine Ebene darunter.
287 845 doc
288 859 Ruebenwurz
$aOptions
289 845 doc
    Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
290
    einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
291 859 Ruebenwurz
    sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
292 845 doc
293
    GROUP 1
294
    -------
295
    Aus dieser Gruppe muss stets genau ein Flag angegeben werden. Diese Flags
296
    bestimmen auf welche Weise die Geschwisterelemente im Menübaum in der
297
    Ausgabe unterdrückt werden.
298
299
    SM2_ALL         Zeigt alle Zweige des Menübaums
300
                        A-1 -> B-1
301
                            -> B-2 -> C-1
302
                                   -> C-2 (CURRENT)
303
                                          -> D-1
304
                                          -> D-2
305
                                   -> C-3
306
                        A-2 -> B-3
307
                            -> B-4
308
309
    SM2_TRIM        Zeigt alle Geschwistermenüs der Seite im aktuellen Pfad.
310
                    Alle Untermenüs von Elemnten die sich nicht im Pfad befinden
311
                    werden entfernt.
312
                        A-1 -> B-1
313
                            -> B-2 -> C-1
314
                                   -> C-2 (CURRENT)
315
                                          -> D-1
316
                                          -> D-2
317
                                   -> C-3
318
                        A-2
319
320
    SM2_CRUMB       Zeigt den Breadcrumb Pfad des Menüs an, also den aktuellen
321
                    Menüpunkt sowie alle Menüpunkte die dorthin führen.
322
                        A-1 -> B-2 -> C-2 (CURRENT)
323
324
    SM2_SIBLING     Wie SM2_TRIM, es werden aber nur Geschwistermenüs der aktuellen
325
                    Seite angezeigt. Alle anderen Punkte werden unterdrückt.
326
                        A-1 -> B-2 -> C-1
327
                                   -> C-2 (CURRENT)
328
                                          -> D-1
329
                                          -> D-2
330
                                   -> C-3
331
332
    GROUP 2
333
    -------
334
    Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
335
336 859 Ruebenwurz
    SM2_NUMCLASS    Fügt die nummerierten Menüklassen "menu-N" und
337 845 doc
                    "menu-child-N hinzu.
338
339
    SM2_ALLINFO     Lädt alle Felder aus der Seitentabelle der Datenbank.
340
                    Dies verursacht einen ziemlich hohen Speicherverbauch und sollte
341
                    deshalb nur mit Bedacht verwendet werden.
342
                    Dadurch werden z.B. die Keywords, die Seitenbeschreibung sowie
343
                    all die anderen Informationen verfügbar, die normalerweise nicht
344
                    geladen werden.
345
                    Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2
346
                    für die jeweilige Menü ID verwendet werden, oder in Verbindung
347
                    mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
348
349
    SM2_NOCACHE     Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
350 859 Ruebenwurz
                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank
351
                    gelesen.
352 845 doc
353
    SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
354 859 Ruebenwurz
                    Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders
355
                    nützlich beim Debuggen der Menüausgabe.
356 845 doc
357
    SM2_BUFFER      Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
358 859 Ruebenwurz
                    zwischen und gibt ihn als kompletten String aus.
359 845 doc
360
    SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
361
                    Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
362 859 Ruebenwurz
                    Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
363 845 doc
                    kombiniert werden.
364
365
    SM2_ESCAPE      Wendet htmlspecialchars auf den Menüstring an.
366
                    Dies kann bei älteren Websitebaker Installationen erforderlich
367
                    sein um eine valide HTML Ausgabe zu erzeugen.
368
369
    SM2_NOESCAPE    Dies ist das Standarverhalten und existiert nur aus Gründen der
370 859 Ruebenwurz
                    Abwärtskompatibilität.
371 845 doc
372 859 Ruebenwurz
    Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
373
    als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
374
    OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
375
376 845 doc
$aItemOpen
377
    Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
378
    wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
379
    Formatstring definiert werden.
380
    Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
381 859 Ruebenwurz
    '[li][a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
382
    Standardfunktion show_menu() zu gewährleisten.
383 845 doc
    Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den
384 859 Ruebenwurz
    <a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
385 845 doc
    verwenden: '<li>[ac][menu_title]</a>'.
386
387
    Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
388 859 Ruebenwurz
    verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER.
389
    Wenn hier ein Formatter angegeben wird, werden alle Argumente
390
    nach $aItemOpen ignoriert.
391 845 doc
392
$aItemClose
393 859 Ruebenwurz
    Dieser String schließt jeden Menüpunkt ab.
394 845 doc
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
395
    ersetzt!
396
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
397
398
$aMenuOpen
399
    Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
400
    Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
401
    werden.
402
    Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
403
    verwendet.
404
405
$aMenuClose
406 859 Ruebenwurz
    Dieser String schließt jedes Menü ab.
407 845 doc
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
408
    ersetzt!
409
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
410
411
$aTopItemOpen
412
    Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
413
    gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
414
415
$aTopMenuOpen
416
    Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
417
    gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
418
419 859 Ruebenwurz
420 845 doc
421 859 Ruebenwurz
ERWEITERTE OPTIONEN
422
===================
423
Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben
424
im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten
425
Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen
426
ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array
427
bereitgestellt werden.
428
Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als 'flags'
429
übergeben werden.
430
431
    'flags'     **ZWINGEND ERFORDELICH** Dies sind die Flags die oben im Abschnitt
432
                PARAMETER unter $aOptions beschrieben wurden.
433
434
    'notrim'    Hiermit wird eine Anzahl von Ebenen festegelegt, die relativ bezogen
435
                auf die in $aStart festgelegte Menüebene, immer angezeigt werden. Dies
436
                bewirkt, daß für diese Ebenen das SM2_TRIM Flag ignoriert wird.
437
438
Um dieses Array zu verwenden, empfiehlt es sich es erst anzulegen und dann den
439
$aOptions parameter mit dem angelegten Array zu beliefern:
440
441
    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
442
    show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
443
444
445
446 845 doc
FORMAT STRINGS
447
==============
448
Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
449 859 Ruebenwurz
verwendet werden und sollen durch den entsprechenden Text ersetzt werden.
450 845 doc
451
[a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
452
[ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
453
[li]            <li> tag mit Klasse:   '<li class="[class]">'
454
[ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
455
[class]         Liste der Klassen für diese Seite
456 859 Ruebenwurz
[menu_title]    Text des Menütitel
457
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
458
[page_title]    text des Seitentitel
459
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
460 845 doc
[url]           die URL der Seiten für den <a> tag
461
[target]        das Seitenziel für den <a> tag
462 859 Ruebenwurz
[page_id]       die Page ID des aktuellen Menüpunktes.
463
[parent]        die Page ID des übergeordneten Menüpunktes.
464
[level]         die Seitenebene,
465
                dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
466
[sib]           Anzahl der Geschwister des aktuellen Menüpunktes.
467
[sibCount]      Anzahl aller Geschwister in diesem Menü.
468 845 doc
[if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
469
470 859 Ruebenwurz
Folgende tags sind NUR verfügbar, wenn das SM2_ALLINFO Flag gesetzt ist.
471 845 doc
472
[description]   Seitenbeschreibung
473
[keywords]      Schlüsselworte der Seite
474
475
476 859 Ruebenwurz
477 845 doc
BEDINGTE FORMATIERUNG
478
=====================
479
Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
480
481
    [if(A){B}]
482
    [if(A){B}else{C}]
483
484
    A   Die Bedingung. Details dazu, siehe unten.
485
486
    B   Der Ausdruck der verwendet wird, wenn die Bedingung erfüllt ist.
487
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
488
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
489
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
490
        Zeichen '}' nicht erlaubt ist).
491
492
    C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
493 859 Ruebenwurz
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
494 845 doc
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
495
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das
496
        Zeichen '}' nicht erlaubt ist).
497
498
Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
499
Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
500 859 Ruebenwurz
mittels || (boolsches oder - OR) oder && (boolsches und - AND) verknüpft werden.
501 845 doc
502 859 Ruebenwurz
Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten
503
Operanden.
504 845 doc
z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
505
506
    Linker Operand. Muss eines der folgende Schlüsselworte sein:
507
        class       Überprüfung ob diese Klasse existiert. Es sind nur die
508
                    "==" and "!=" Operatoren erlaubt. In diesem Fall haben die Operatoren
509
                    die Bedeutung von "enthält" bzw. "enthält nicht" an Stelle von
510
                    "ist gleich" bzw. "ist nicht gleich"
511
        level       Überprüfung der Seitenebene.
512
        sib         Überprüfung der Geschwisteranzahl der aktuellen Seite.
513
        sibCount    Überprüfung der Geamtanzahl der Geschwister im aktuellen Menü.
514
        id          Überprüfung der page id.
515
516
    Operator. Muss einer der folgenden sein:
517
        <           Kleiner als
518
        <=          Kleiner oder gleich als
519
        ==          Gleich
520
        !=          Nicht gleich
521
        >=          Grössr oder gleich als
522 859 Ruebenwurz
        >           Grösser als
523 845 doc
524
    Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
525
                     verwendeten Schlüsselwort ab.
526
        class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
527
                    spezifiziert sind.
528
        level       Überprüfung der Seitenebene gegen folgende Werte:
529 859 Ruebenwurz
                        <number>  die absolute Seitenebene
530
                        root      die oberste Seitenebene
531
                        granny    die Seitenebene über der übergeordneten Seitenebene
532
                        parent    die übergeordnete Seitenebene
533
                        current   die aktuelle Seitenebene
534
                        child     die untergeornete Seitenebene
535 845 doc
        id          Überprüfung der page id gegen folgende Werte:
536 859 Ruebenwurz
                        <number>  die absolute page id
537
                        parent    die übergeordnete page id
538
                        current   die aktuelle page id
539 845 doc
        sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
540
                    Geschwister in diesem Menü zu überprüfen
541
        sibCount    Eine positive Integerzahl
542
543
Folgende Beispiele ergeben "wahr" und der Ausdruck {exp} wird ausgeführt, wenn zutrifft:
544
545
    [if(class==menu-expand){exp}]   hat ein Untermenü
546
    [if(class==menu-first){exp}]    ist der erste Eintrag in einem Menü
547
    [if(class!=menu-first){exp}]    ist NICHT der erste Eintrag in einem Menü
548
    [if(class==menu-last){exp}]     ist der letzte Eintrag in einem Menü
549
    [if(level==0){exp}]             befindet sich auf der obersten Ebene
550
    [if(level>0){exp}]              befindet sich NICHT auf der obersten Ebene
551
    [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
552
    [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
553
    [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
554 859 Ruebenwurz
    [if(level>parent){exp}]         ist in einem Geschwistermenü oder dem Untermenü eines
555
                                    Geschwistermenüs
556 845 doc
    [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
557
558 859 Ruebenwurz
Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen
559
ausgeführt.
560 845 doc
Zum Beispiel wird "foo" immer dann ausgeführt, wenn die if Überprüfung falsch ergibt, also:
561
562
    [if(sib==2){exp}else{foo}]      ist NICHT der zweite Eintrag im Menü
563
    [if(sibCount>2){exp}else{foo}]  ist NICHT in einem Menü mit mehr als zwei Einträgen
564
565
Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
566
567 859 Ruebenwurz
    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere
568
    Eintrag im Menü
569 845 doc
570 859 Ruebenwurz
    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat
571
    Untermenüs
572 845 doc
573
Bitte beachten:
574
Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
575
* es findet keine Überprüfung auf evtl. Schleifen statt (alle Überprüfungen werden immer ausgeführt)
576
* Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
577
* sowohl || als auch && haben die gleiche Wertigkeit
578
579 859 Ruebenwurz
580
581 845 doc
FORMATTER
582
=========
583
Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
584
585
Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
586
Formatierer von show_menu2 mit einem eigenen zu ersetzen.
587
In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
588 859 Ruebenwurz
Die API, die verwendet werden muss, sieht wie folgt aus:
589 845 doc
590 859 Ruebenwurz
(Anmerkung des Übersetzers: Kommentare sind nicht übersetzt, wer sich so weit vorwagt, sollte
591 845 doc
damit keine Probleme haben ;-)
592
593
class SM2_Formatter
594
{
595
    // called once before any menu is processed to allow object initialization
596
    function initialize() { }
597
598
    // called to open the menu list
599
    function startList($aPage, $aUrl) { }
600
601
    // called to open the menu item
602
    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
603
604
    // called to close the menu item
605
    function finishItem() { }
606
607
    // called to close the menu list
608
    function finishList() { }
609
610
    // called once after all menu has been processed to allow object finalization
611
    function finalize() { }
612
613
    // called once after finalize() if the SM2_NOOUTPUT flag is used
614
    function getOutput() { }
615
};