Project

General

Profile

1
show_menu2, version 4.9
2
=======================
3
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

    
10
---
11
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
---
15

    
16

    
17

    
18
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
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

    
28
   
29
   
30
BENUTZUNG VON SHOW_MENU2
31
========================
32
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

    
37
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
    
41
    show_menu2();
42
    
43
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

    
47
    <?php show_menu2(); ?>
48

    
49
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
Zum Beispiel:
56

    
57
    li.menu-expand  { font-weight: bold; }
58
    li.menu-current { background: red; }
59

    
60
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

    
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
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

    
77

    
78

    
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
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
    
126
    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
FUNKTION
155
========
156

    
157
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
        $aOptions       = SM2_TRIM,
164
        $aItemOpen      = '[li][a][menu_title]</a>',
165
        $aItemClose     = '</li>',
166
        $aMenuOpen      = '[ul]',
167
        $aMenuClose     = '</ul>',
168
        $aTopItemOpen   = false,
169
        $aTopMenuOpen   = false
170
        )
171

    
172
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
dabei helfen:
176

    
177
    $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
    $aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit 
184
    "SM2_" beginnen zulässig.
185
    
186
    Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs 
187
    steuern.
188
    
189
    Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den 
190
    jeweiligen Vorgabewert zu erhalten.
191

    
192
    Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu 
193
    erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte 
194
    Verwendung finden:
195

    
196
        show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
197

    
198
Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
199

    
200

    
201
HTML-AUSGABE
202
============
203
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

    
207
    KLASSE          ZUORDNUNG
208
    ------------    -------------------------------------------------------
209
    menu-top        Nur der erste Menüpunkt.
210
    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
    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLASS Flag gesetzt 
219
    ist:
220

    
221
    menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe, 
222
                    beginnend bei 0, des jeweiligen Menüpunktes steht.
223
                    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
    Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu    
272
    verwenden.
273
    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
    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
    kann einer der folgenden Werte verwendet werden:
280

    
281
        SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
282
                    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

    
286
        SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
287
                    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

    
292
        page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
293
                    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
                    Browsers: http://SITE/admin/pages/modify.php?page_id=35
297

    
298
$aMaxLevel   
299
    Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
300
    beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier 
301
    festgelegten Ebene.
302
        
303
        SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
304

    
305
        SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen. 
306
                     SM2_CURR      Aktuelle Ebene (keine Unterebene)
307
                     SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
308

    
309
        SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
310
                     Die Ebenen werden unabhängig davon angezeigt,egal 
311
                     auf welcher Ebene sich die aktuelle Seite befindet.
312
                     SM2_START     Eine einzelne Ebene ab der Startebene.
313
                     SM2_START+1   Startebene + eine Ebene darunter.
314

    
315
        SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
316
                     Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
317
                     SM2_MAX       Nur die Startebene (gleiche Wirkung wie SM2_START)
318
                     SM2_MAX+1     Die Startebene und eine Ebene darunter.
319

    
320
$aOptions   
321
    Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
322
    einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
323
    sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
324

    
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
    SM2_NUMCLASS    Fügt die nummerierten Menüklassen "menu-N" und 
369
                    "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
                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank 
383
                    gelesen.
384
    
385
    SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
386
                    Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders 
387
                    nützlich beim Debuggen der Menüausgabe.
388
    
389
    SM2_BUFFER      Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
390
                    zwischen und gibt ihn als kompletten String aus.
391
    
392
    SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
393
                    Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
394
                    Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
395
                    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
    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

    
408
    Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
409
    als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
410
    OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
411
    
412
$aItemOpen
413
    Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
414
    wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
415
    Formatstring definiert werden.
416
    Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
417
    '[li][a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
418
    Standardfunktion show_menu() zu gewährleisten.
419
    Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den 
420
    <a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
421
    verwenden: '<li>[ac][menu_title]</a>'.
422
    
423
    Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
424
    verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER. 
425
    Wenn hier ein Formatter angegeben wird, werden alle Argumente
426
    nach $aItemOpen ignoriert.
427

    
428
$aItemClose
429
    Dieser String schließt jeden Menüpunkt ab. 
430
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
431
    ersetzt!
432
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
433
    
434
$aMenuOpen
435
    Mit diesem Formatstring wird eine Liste von Menüeinträgen geöffnet. Für das erste
436
    Menü kann mittels $aTopMenuOpen ein davon abweichender Formatstring definiert
437
    werden.
438
    Wenn dieser Parameter auf false gesetzt ist wird der Vorgabewert '[ul]'
439
    verwendet.
440
    
441
$aMenuClose
442
    Dieser String schließt jedes Menü ab. 
443
    Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
444
    ersetzt!
445
    Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
446

    
447
$aTopItemOpen
448
    Der Formatstring für den allerersten Menüpunkt. Wenn dieser Parameter auf false
449
    gesetzt wird, wird der selbe Formatstring wie bei $aItemOpen verwendet.
450

    
451
$aTopMenuOpen 
452
    Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
453
    gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
454

    
455
    
456

    
457
ERWEITERTE OPTIONEN
458
===================
459
Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben 
460
im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten 
461
Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen 
462
ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array 
463
bereitgestellt werden.
464
Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als 'flags' 
465
übergeben werden.
466

    
467
    'flags'     **ZWINGEND ERFORDELICH** Dies sind die Flags die oben im Abschnitt 
468
                PARAMETER unter $aOptions beschrieben wurden.
469

    
470
    'notrim'    Hiermit wird eine Anzahl von Ebenen festegelegt, die relativ bezogen 
471
                auf die in $aStart festgelegte Menüebene, immer angezeigt werden. Dies 
472
                bewirkt, daß für diese Ebenen das SM2_TRIM Flag ignoriert wird.
473

    
474
Um dieses Array zu verwenden, empfiehlt es sich es erst anzulegen und dann den 
475
$aOptions parameter mit dem angelegten Array zu beliefern:
476

    
477
    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
478
    show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
479
    
480
    
481
    
482
FORMAT STRINGS
483
==============
484
Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
485
verwendet werden und sollen durch den entsprechenden Text ersetzt werden.
486

    
487
[a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
488
[ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
489
[li]            <li> tag mit Klasse:   '<li class="[class]">'
490
[ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
491
[class]         Liste der Klassen für diese Seite
492
[menu_title]    Text des Menütitel 
493
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
494
[page_title]    text des Seitentitel 
495
                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
496
[url]           die URL der Seiten für den <a> tag
497
[target]        das Seitenziel für den <a> tag
498
[page_id]       die Page ID des aktuellen Menüpunktes.
499
[parent]        die Page ID des übergeordneten Menüpunktes.
500
[level]         die Seitenebene, 
501
                dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
502
[sib]           Anzahl der Geschwister des aktuellen Menüpunktes.
503
[sibCount]      Anzahl aller Geschwister in diesem Menü.
504
[if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
505

    
506
Folgende tags sind NUR verfügbar, wenn das SM2_ALLINFO Flag gesetzt ist.
507

    
508
[description]   Seitenbeschreibung
509
[keywords]      Schlüsselworte der Seite
510

    
511

    
512

    
513
BEDINGTE FORMATIERUNG
514
=====================
515
Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
516

    
517
    [if(A){B}]
518
    [if(A){B}else{C}]
519
    
520
    A   Die Bedingung. Details dazu, siehe unten.
521
    
522
    B   Der Ausdruck der verwendet wird, wenn die Bedingung erfüllt ist.
523
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
524
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
525
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das 
526
        Zeichen '}' nicht erlaubt ist).
527
    
528
    C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
529
        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
530
        enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
531
        'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das 
532
        Zeichen '}' nicht erlaubt ist).
533

    
534
Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
535
Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
536
mittels || (boolsches oder - OR) oder && (boolsches und - AND) verknüpft werden.    
537

    
538
Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten 
539
Operanden.
540
z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
541
    
542
    Linker Operand. Muss eines der folgende Schlüsselworte sein:
543
        class       Überprüfung ob diese Klasse existiert. Es sind nur die
544
                    "==" and "!=" Operatoren erlaubt. In diesem Fall haben die Operatoren
545
                    die Bedeutung von "enthält" bzw. "enthält nicht" an Stelle von
546
                    "ist gleich" bzw. "ist nicht gleich"
547
        level       Überprüfung der Seitenebene.
548
        sib         Überprüfung der Geschwisteranzahl der aktuellen Seite.
549
        sibCount    Überprüfung der Geamtanzahl der Geschwister im aktuellen Menü.
550
        id          Überprüfung der page id.
551
    
552
    Operator. Muss einer der folgenden sein:
553
        <           Kleiner als
554
        <=          Kleiner oder gleich als
555
        ==          Gleich
556
        !=          Nicht gleich
557
        >=          Grössr oder gleich als
558
        >           Grösser als
559
    
560
    Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
561
                     verwendeten Schlüsselwort ab.
562
        class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
563
                    spezifiziert sind.
564
        level       Überprüfung der Seitenebene gegen folgende Werte:
565
                        <number>  die absolute Seitenebene
566
                        root      die oberste Seitenebene
567
                        granny    die Seitenebene über der übergeordneten Seitenebene
568
                        parent    die übergeordnete Seitenebene
569
                        current   die aktuelle Seitenebene
570
                        child     die untergeornete Seitenebene
571
        id          Überprüfung der page id gegen folgende Werte:
572
                        <number>  die absolute page id
573
                        parent    die übergeordnete page id
574
                        current   die aktuelle page id
575
        sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
576
                    Geschwister in diesem Menü zu überprüfen
577
        sibCount    Eine positive Integerzahl
578
        
579
Folgende Beispiele ergeben "wahr" und der Ausdruck {exp} wird ausgeführt, wenn zutrifft:
580
    
581
    [if(class==menu-expand){exp}]   hat ein Untermenü
582
    [if(class==menu-first){exp}]    ist der erste Eintrag in einem Menü
583
    [if(class!=menu-first){exp}]    ist NICHT der erste Eintrag in einem Menü
584
    [if(class==menu-last){exp}]     ist der letzte Eintrag in einem Menü
585
    [if(level==0){exp}]             befindet sich auf der obersten Ebene
586
    [if(level>0){exp}]              befindet sich NICHT auf der obersten Ebene
587
    [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
588
    [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
589
    [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
590
    [if(level>parent){exp}]         ist in einem Geschwistermenü oder dem Untermenü eines      
591
                                    Geschwistermenüs
592
    [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
593

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

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

    
601
Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
602

    
603
    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere   
604
    Eintrag im Menü    
605
               
606
    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat 
607
    Untermenüs
608
        
609
Bitte beachten:
610
Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
611
* es findet keine Überprüfung auf evtl. Schleifen statt (alle Überprüfungen werden immer ausgeführt)
612
* Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
613
* sowohl || als auch && haben die gleiche Wertigkeit
614

    
615

    
616

    
617
FORMATTER
618
=========
619
Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
620

    
621
Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
622
Formatierer von show_menu2 mit einem eigenen zu ersetzen.
623
In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
624
Die API, die verwendet werden muss, sieht wie folgt aus:
625

    
626
(Anmerkung des Übersetzers: Kommentare sind nicht übersetzt, wer sich so weit vorwagt, sollte
627
damit keine Probleme haben ;-)
628

    
629
class SM2_Formatter
630
{
631
    // called once before any menu is processed to allow object initialization
632
    function initialize() { }
633
    
634
    // called to open the menu list
635
    function startList($aPage, $aUrl) { }
636
    
637
    // called to open the menu item
638
    function startItem($aPage, $aUrl, $aCurrSib, $aSibCount) { }
639
    
640
    // called to close the menu item
641
    function finishItem() { }
642
    
643
    // called to close the menu list
644
    function finishList() { }
645
    
646
    // called once after all menu has been processed to allow object finalization
647
    function finalize() { }
648
    
649
    // called once after finalize() if the SM2_NOOUTPUT flag is used
650
    function getOutput() { }
651
};
(2-2/7)