Project

General

Profile

1
show_menu2, version 4.6
2
=======================
3
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.
4

    
5
---
6
Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte eine Email an bjm@wwnw.de.
7
---
8

    
9
INSTALLATION
10
============
11
1. Die aktuelle Version von http://code.jellycan.com/show_menu2/ herunterladen.
12
2. In das Admin-Backend der Website Baker Installation einlogen.
13
3. Erweiterungen -> Module aufrufen.
14
4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über "Modul deinstallieren" auswählen und deinstallieren.
15
5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File auswählen und installieren.
16

    
17
   
18
BENUTZUNG VON SHOW_MENU2
19
========================
20
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.
21

    
22
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:
23
    
24
	show_menu2();
25
    
26
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):
27

    
28
    <?php show_menu2(); ?>
29

    
30
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 <li> 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.
31
Zum Beispiel:
32

    
33
    li.menu-expand  { font-weight: bold; }
34
    li.menu-current { background: red; }
35

    
36
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:
37

    
38
    show_menu2(0, SM2_ROOT, SM2_START);
39
    
40
Oder um beispielsweise bis zu zwei Unterebenen der aktuellen Seite anzuzeigen:
41

    
42
    show_menu2(0, SM2_CURR+1, SM2_CURR+2);
43

    
44
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/
45

    
46

    
47
FUNKTION
48
========
49
Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
50

    
51
    show_menu2(
52
        $aMenu          = 0,
53
        $aStart         = SM2_ROOT,
54
        $aMaxLevel      = SM2_CURR+1,
55
        $aFlags         = SM2_TRIM,
56
        $aItemOpen      = '[li][a][menu_title]</a>',
57
        $aItemClose     = '</li>',
58
        $aMenuOpen      = '[ul]',
59
        $aMenuClose     = '</ul>',
60
        $aTopItemOpen   = false,
61
        $aTopMenuOpen   = false
62
        )
63

    
64
Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes einzelnen Parameters.
65
Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den jeweiligen Vorgabewert zu erhalten.
66
Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte Verwendung finden:
67

    
68
show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
69

    
70
Bitte beachten: bis einschliessich $aFlags müssen alle Parameter explizit übergeben werden!
71

    
72

    
73
HTML-AUSGABE
74
============
75
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.
76

    
77
    KLAssE          ZUORDNUNG
78
    ------------    -------------------------------------------------------
79
    menu-top        Nur der erste Menüpunkt
80
    menu-parent     Jeder Hauptmenüpunkt.
81
    menu-current    Nur der Menüpunkt der aktuellen Seite.
82
    menu-sibling    Alle "Geschwister" der aktuellen Seite.
83
    menu-child      Jedes Untermenü der aktuellen Seite.
84
    menu-expand     Jedes Menü das Untermenüs hat.
85
    menu-first      Der erste Punkt eines jeden Menüs oder Untermenüs.
86
    menu-last       Der letzte Punkt eines jeden Menüs oder Untermenüs.
87

    
88
    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLAss flag gesetzt ist:
89

    
90
    menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe, 
91
		    beginnend bei 0, des jeweiligen Menüpunktes steht.
92
                    Die oberste Ebene ist also immer menu-0, die nächste
93
                    Ebene menu-1 usw.
94
    menu-child-N    Jedes Untermenü der aktuellen Seiten, wobei das N für die
95
                    RELATIVE Tiefe des Untermenüs, beginnend bei 0, steht.
96
        
97
Beispiel einer HTML-Ausgabe:
98

    
99
<ul class="menu-top menu-0">
100
  <li class="menu-0 menu-first">  ... </li>
101
  <li class="menu-0 menu-expand menu-parent">  ...
102
  <ul class="menu-1">
103
    <li class="menu-1 menu-expand menu-first">  ...
104
    <ul class="menu-2">
105
      <li class="menu-2 menu-first">  ...
106
      <li class="menu-2 menu-last">  ...
107
    </ul>
108
    </li>
109
    <li class="menu-1 menu-expand menu-parent">  ...
110
    <ul class="menu-2">
111
      <li class="menu-2 menu-expand menu-current menu-first">  ...      ** CURRENT PAGE **
112
      <ul class="menu-3">
113
        <li class="menu-3 menu-child menu-child-0 menu-first">  ...
114
        <ul class="menu-4">
115
          <li class="menu-4 menu-child menu-child-1 menu-first">  ... </li>
116
          <li class="menu-4 menu-child menu-child-1 menu-last">  ... </li>
117
        </ul>
118
        </li>
119
        <li class="menu-3 menu-child menu-child-0 menu-last">  ... </li>
120
      </ul>
121
      </li>
122
      <li class="menu-2 menu-sibling menu-last">  ... </li>
123
    </ul>
124
    </li>
125
    <li class="menu-1">  ... </li>
126
    <li class="menu-1 menu-expand menu-last">  ...
127
    <ul class="menu-2">
128
      <li class="menu-2 menu-first menu-last">  ... </li>
129
    </ul>
130
    </li>
131
  </ul>
132
  </li>
133
  <li class="menu-0 menu-last">  ... </li>
134
</ul>
135

    
136

    
137
PARAMETER
138
=========
139
$aMenu      
140
    Nummer des Menüs. Dies ist nützlich um mehrere Menüs auf einer Seite zu verwenden.
141
    Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
142
    im System verwendeten Menüs zurück.
143

    
144
$aStart  
145
    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den meisten
146
    Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es kann einer
147
    der folgenden Werte verwendet werden:
148

    
149
        SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
150
                      SM2_ROOT      Beginnt auf der obersten Ebene
151
                      SM2_ROOT+1    Beginnt eine Ebene unterhalbe der obersten Ebene
152
                      SM2_ROOT+2    Beginnt zwei Ebenen unterhalbe der obersten Ebene
153

    
154
        SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
155
                      SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
156
                                    der aktuellen Ebene
157
                      SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
158
                                    mit allen Unterebenen
159

    
160
        page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
161
                    Alle Untermenüs dieser Seite werden angezeigt. (Die page id kann
162
                    ermittelt werden, wenn man die Seite im Admin-Backend editiert,
163
		    sie steht dann in der Adresszeile des Browsers:
164
		    http://SITE/admin/pages/modify.php?page_id=35
165

    
166
$aMaxLevel   
167
    Die maximale Anzahl der Ebenen die angezeigt werden, die Anzeige
168
    beginnt ab der in $aStart festgelegten Ebene bis hin zu der hier 
169
    festgelegten Ebene.
170
        
171
	SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
172

    
173
        SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen. 
174
                        SM2_CURR      Aktuelle Ebene (keine Unterebene)
175
                        SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
176

    
177
        SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
178
                     Die Ebenen werden unabhängig davon angezeigt 
179
                     auf welcher Ebene sich die aktuelle Seite befindet.
180
		        SM2_START     Eine einzelne Ebene ab der Startebene
181
                        SM2_START+1   Startebene + eine Ebene darunter
182

    
183
        SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
184
                     Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
185
			SM2_MAX       Starting level only (same as SM2_START)
186
                        SM2_MAX+1     Maximum of starting level and 1 level.
187

    
188
$aFlags   
189
    Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
190
    einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
191
    sowohl TRIM als auch PRETTY zu definieren, verwendet man: SM2_TRIM|SM2_PRETTY.
192

    
193
    GROUP 1
194
    -------
195
    Aus dieser Gruppe muss stets genau ein Flag angegeben werden. Diese Flags
196
    bestimmen auf welche Weise die Geschwisterelemente im Menübaum in der
197
    Ausgabe unterdrückt werden.
198
    
199
    SM2_ALL         Zeigt alle Zweige des Menübaums
200
                        A-1 -> B-1 
201
                            -> B-2 -> C-1
202
                                   -> C-2 (CURRENT)
203
                                          -> D-1
204
                                          -> D-2
205
                                   -> C-3
206
                        A-2 -> B-3
207
                            -> B-4
208

    
209
    SM2_TRIM        Zeigt alle Geschwistermenüs der Seite im aktuellen Pfad.
210
                    Alle Untermenüs von Elemnten die sich nicht im Pfad befinden
211
                    werden entfernt.
212
                        A-1 -> B-1 
213
                            -> B-2 -> C-1
214
                                   -> C-2 (CURRENT)
215
                                          -> D-1
216
                                          -> D-2
217
                                   -> C-3
218
                        A-2 
219

    
220
    SM2_CRUMB       Zeigt den Breadcrumb Pfad des Menüs an, also den aktuellen
221
                    Menüpunkt sowie alle Menüpunkte die dorthin führen.
222
                        A-1 -> B-2 -> C-2 (CURRENT)
223

    
224
    SM2_SIBLING     Wie SM2_TRIM, es werden aber nur Geschwistermenüs der aktuellen
225
                    Seite angezeigt. Alle anderen Punkte werden unterdrückt.
226
                        A-1 -> B-2 -> C-1
227
                                   -> C-2 (CURRENT)
228
                                          -> D-1
229
                                          -> D-2
230
                                   -> C-3
231

    
232
    GROUP 2
233
    -------
234
    Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
235

    
236
    SM2_NUMCLAss    Fügt die nummerierten Menüklassen "menu-N" und 
237
                    "menu-child-N hinzu.
238
        
239
    SM2_ALLINFO     Lädt alle Felder aus der Seitentabelle der Datenbank.
240
                    Dies verursacht einen ziemlich hohen Speicherverbauch und sollte
241
                    deshalb nur mit Bedacht verwendet werden.
242
                    Dadurch werden z.B. die Keywords, die Seitenbeschreibung sowie
243
                    all die anderen Informationen verfügbar, die normalerweise nicht
244
                    geladen werden.
245
                    Bitte beachten: dieses Flag muss beim ERSTEN Aufruf von schow_menu2
246
                    für die jeweilige Menü ID verwendet werden, oder in Verbindung
247
                    mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
248
    
249
    SM2_NOCACHE     Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
250
                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank gelesen.
251
    
252
    SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
253
                    Zeilenumbrüchen in eine gut lesbare Form. Dies ist besonders nützlich
254
                    beim Debuggen der Menüausgabe.
255
    
256
    SM2_BUFFER      Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
257
                    zwischen und gibt ihn al kompletten String aus.
258
    
259
    SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
260
                    Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
261
                    Dieses Flag kann bei Bedarf mit jedem flag aus der Gruppe 1
262
                    kombiniert werden.
263
    
264
    SM2_ESCAPE      Wendet htmlspecialchars auf den Menüstring an.
265
                    Dies kann bei älteren Websitebaker Installationen erforderlich
266
                    sein um eine valide HTML Ausgabe zu erzeugen.
267
                        
268
    SM2_NOESCAPE    Dies ist das Standarverhalten und existiert nur aus Gründen der 
269
                    Abwärtskompatibiltät.                   
270

    
271
$aItemOpen
272
    Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
273
    wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
274
    Formatstring definiert werden.
275
    Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
276
    '[li][a][menu_title]</a>' verwendet um die Kompatibiltät zur Website Baker
277
    Standardfunktion show_menu() zu gewährleiten.
278
    Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den 
279
    <a> Tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
280
    verwenden: '<li>[ac][menu_title]</a>'.
281
    
282
    Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
283
    verwendet werden. Im Abschnitt "Formatter" findet sich dazu eine detailierte 
284
    Beschreibung. Wenn hier ein Formatter angegeben wird, werden alle Argumente
285
    nach $aItenOpen ignoriert.
286

    
287
$aItemClose
288
    Dieser String schliesst jeden Menüpunkt ab. 
289
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
290
    ersetzt!
291
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
292
    
293
$aMenuOpen
294
    Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
295
    Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
296
    werden.
297
    Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
298
    verwendet.
299
    
300
$aMenuClose
301
    Dieser String schliesst jedes Menü ab. 
302
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
303
    ersetzt!
304
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
305

    
306
$aTopItemOpen
307
    Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
308
    gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
309

    
310
$aTopMenuOpen 
311
    Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
312
    gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
313

    
314

    
315
FORMAT STRINGS
316
==============
317
Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
318
verwendet werden und werden durch den entsprechenden Text ersetzt.
319

    
320
[a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
321
[ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
322
[li]            <li> tag mit Klasse:   '<li class="[class]">'
323
[ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
324
[class]         Liste der Klassen für diese Seite
325
[menu_title]    Text des Menütitel (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
326
[page_title]    text des Seitentitel (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
327
[url]           die URL der Seiten für den <a> tag
328
[target]        das Seitenziel für den <a> tag
329
[page_id]       die Page ID des aktuellen Menüpunktes
330
[parent]        die Page ID des übergeorneten Menüpunktes
331
[level]         die Seitenebene, dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
332
[sib]           Anzahl der Geschwister des aktuellen Menüpunktes
333
[sibCount]      Anzahl aller Geschwister in diesem Menü
334
[if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
335

    
336
Folgende tags sind nur verfügbar, wenn das SM2_ALLINFO flag gesetzt ist.
337

    
338
[description]   Seitenbeschreibung
339
[keywords]      Schlüsselworte der Seite
340

    
341

    
342
BEDINGTE FORMATIERUNG
343
=====================
344
Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
345

    
346
    [if(A){B}]
347
    [if(A){B}else{C}]
348
    
349
    A   Die Bedingung. Details dazu, siehe unten.
350
    
351
    B   Der Ausdruck der verwendet wird, wenn die Bedingung erfüllt ist.
352
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
353
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
354
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das 
355
        Zeichen '}' nicht erlaubt ist).
356
    
357
    C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
358
        Dies kann ein beliebiger String sein, der jedoch nicht das zeichen '}'
359
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
360
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das 
361
        Zeichen '}' nicht erlaubt ist).
362

    
363
Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
364
Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
365
mittels || (boolsches oder - OR) oder && (boolsches und - AND) vernüpft werden.    
366

    
367
Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten Operanden.
368
z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
369
    
370
    Linker Operand. Muss eines der folgende Schlüsselworte sein:
371
        class       Überprüfung ob diese Klasse existiert. Es sind nur die
372
                    "==" and "!=" Operatoren erlaubt. In diesem Fall haben die Operatoren
373
                    die Bedeutung von "enthält" bzw. "enthält nicht" an Stelle von
374
                    "ist gleich" bzw. "ist nicht gleich"
375
        level       Überprüfung der Seitenebene.
376
        sib         Überprüfung der Geschwisteranzahl der aktuellen Seite.
377
        sibCount    Überprüfung der Geamtanzahl der Geschwister im aktuellen Menü.
378
        id          Überprüfung der page id.
379
    
380
    Operator. Muss einer der folgenden sein:
381
        <           Kleiner als
382
        <=          Kleiner oder gleich als
383
        ==          Gleich
384
        !=          Nicht gleich
385
        >=          Grössr oder gleich als
386
        >           grösser als
387
    
388
    Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
389
                     verwendeten Schlüsselwort ab.
390
        class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
391
                    spezifiziert sind.
392
        level       Überprüfung der Seitenebene gegen folgende Werte:
393
                      <number>  die absolute Seitenebene
394
                      root      die oberste Seitenebene
395
                      granny    die Seitenebene über der übergeordneten Seitenebene
396
                      parent    die übergeordnete Seitenebene
397
                      current   die aktuelle Seitenebene
398
                      child     die untergeornete Seitenebene
399
        id          Überprüfung der page id gegen folgende Werte:
400
                      <number>  die absolute page id
401
                      parent    die übergeordnete page id
402
                      current   die aktuelle page id
403
        sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
404
                    Geschwister in diesem Menü zu überprüfen
405
        sibCount    Eine positive Integerzahl
406
        
407
Folgende Beispiele ergeben "wahr" und der Ausdruck {exp} wird ausgeführt, wenn zutrifft:
408
    
409
    [if(class==menu-expand){exp}]   hat ein Untermenü
410
    [if(class==menu-first){exp}]    ist der erste Eintrag in einem Menü
411
    [if(class!=menu-first){exp}]    ist NICHT der erste Eintrag in einem Menü
412
    [if(class==menu-last){exp}]     ist der letzte Eintrag in einem Menü
413
    [if(level==0){exp}]             befindet sich auf der obersten Ebene
414
    [if(level>0){exp}]              befindet sich NICHT auf der obersten Ebene
415
    [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
416
    [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
417
    [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
418
    [if(level>parent){exp}]         ist ine eine Geschwistermenü oder dem Untermenü eines Geschwistermenüs
419
    [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
420

    
421
Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen ausgeführt.
422
Zum Beispiel wird "foo" immer dann ausgeführt, wenn die if Überprüfung falsch ergibt, also:
423

    
424
    [if(sib==2){exp}else{foo}]      ist NICHT der zweite Eintrag im Menü
425
    [if(sibCount>2){exp}else{foo}]  ist NICHT in einem Menü mit mehr als zwei Einträgen
426

    
427
Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
428

    
429
    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere Eintrag im Menü    
430
               
431
    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat Untermenüs
432
        
433
Bitte beachten:
434
Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
435
* es findet keine Überprüfung auf evtl. Schleifen statt (alle Überprüfungen werden immer ausgeführt)
436
* Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
437
* sowohl || als auch && haben die gleiche Wertigkeit
438

    
439
FORMATTER
440
=========
441
Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
442

    
443
Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
444
Formatierer von show_menu2 mit einem eigenen zu ersetzen.
445
In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
446
Die API die verwendet werden muss sieht wie folgt aus:
447

    
448
(Anmerkung des Übersetzers: Kommentare nicht übersetzt, wer sich so weit vorwagt, sollte
449
damit keine Probleme haben ;-)
450

    
451
class SM2_Formatter
452
{
453
    // called once before any menu is processed to allow object initialization
454
    function initialize() { }
455
    
456
    // called to open the menu list
457
    function startList($aPage, $aUrl) { }
458
    
459
    // called to open the menu item
460
    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
461
    
462
    // called to close the menu item
463
    function finishItem() { }
464
    
465
    // called to close the menu list
466
    function finishList() { }
467
    
468
    // called once after all menu has been processed to allow object finalization
469
    function finalize() { }
470
    
471
    // called once after finalize() if the SM2_NOOUTPUT flag is used
472
    function getOutput() { }
473
};
474

    
475

    
476

    
(2-2/7)