Syntax- und API-Referenz
Referenz aller öffentlichen Elemente des Plugins wkacmenu: Wiki-Syntax, Order-Seite, Konfiguration, AJAX-Endpunkte, PHP-API, CSS-Klassen, Cookie. Einführung und Konzepte: Überblick.
Menü-Syntax
Signatur:
{{wk:acmenu>}}
{{wk:acmenu>parameter=wert|parameter=wert|...}}
Zusammenfassung: Rendert das Akkordeon-Menü an der Stelle des Aufrufs (üblich: in einer Sidebar-Seite, zusammen mit ~~NOCACHE~~).
Parameter (pipe-getrennt; das > nach wk:acmenu ist Pflicht, sonst greift DokuWikis Media-Syntax und rendert einen kaputten Link):
| Parameter | Werte | Ohne Angabe | Beschreibung |
|---|---|---|---|
ns | Namespace-ID oder auto | Sidebar-Erkennung | Fester Basis-Namespace; auto = fokussierte Ansicht auf den aktuellen Namespace plus Geschwister-Namespaces mit lesbarem Inhalt auf Sprach-Ebene |
startns | current | aus | Fokussierte Ansicht: nur der aktuelle Namespace plus ACL-basierter „Nach oben„-Link |
dynamic | Zahl ≥ 0 | Einstellung default_depth | Vorlade-Tiefe: N > 0 lädt N Ebenen vor, tiefere Ebenen kommen per AJAX beim Aufklappen; 0 = unbegrenzt vorladen (kein Lazy Loading) |
icons | fa, none | none | fa rendert FontAwesome-Icons (Ordner, Seite, Sammlung, extern, nach oben) |
Anmerkungen:
- Ohne
ns/startnssucht das Plugin aufwärts nach einersidebar*-Seite und beginnt das Menü an diesem Namespace. - In den fokussierten Modi (
ns=auto,startns=current) wird eine Sammlung nie Menü-Basis; die Basis verlagert sich zum Eltern-Namespace der äußersten Sammlung. - Die Namespace-Genealogie der aktuellen Seite wird immer server-seitig vorgeladen — ein offener Knoten auf dem aktuellen Pfad zeigt seine Kinder auch jenseits der
dynamic-Tiefe. - Ohne
dynamicentscheidet die Einstellungdefault_depth(Vorgabe1): eine Ebene server-seitig, tiefere Namespaces werden beim Anklicken nachgeladen. Unbegrenzt heißt, bei jedem Seitenaufruf den ganzen Seitenbestand zu durchlaufen — das Menü ist bewusst nicht zwischengespeichert, weil es von aktueller Seite, Rechten und Aufklapp-Zustand abhängt. - Bei
sneaky_indexwerden geschützte Zwischen-Namespaces mit lesbarem Inhalt darunter als partial angezeigt: Beschriftung ohne Link, aufklappbar.
Beispiel:
~~NOCACHE~~
{{wk:acmenu>ns=auto|icons=fa|dynamic=1}}
Titel-Marker
Signatur:
{{wk:title>Titeltext}}
{{wk:title>de:Text|en:Text}}
Zusammenfassung: Hinterlegt einen unsichtbaren Menü-Titel in den Metadaten der Seite.
Wert: beliebiger Text; optional ein eingebetteter ...-Ausdruck (Plugin wki18n).
Anmerkungen: Titel-Priorität im Menü: Titel-Marker vor erster Überschrift (useheading) vor Seiten-ID. Wirkt nach dem nächsten Rendern der Seite.
Beispiel: siehe How to: Menü-Titel ohne sichtbare Überschrift setzen.
COLLECTION-Marker
Signatur:
~~COLLECTION~~
Zusammenfassung: Markiert — auf der start-Seite eines Namespace — den Namespace als Seitensammlung.
Wert: keiner; Leerraum vor dem schließenden ~~ wird toleriert.
Anmerkungen: Wirkung (Ikone, Klickverhalten, Menü-Basis-Verlagerung, kein start-Kind-Blatt): How to: Einen Namespace als Seitensammlung führen. Der Marker liegt nur in den aktuellen Metadaten — nach Entfernen und erneutem Rendern ist er weg. In Markdown-Seiten wird er nicht erkannt.
Beispiel: siehe How to: Einen Namespace als Seitensammlung führen.
Order-Seite
Signatur: Seite <ns>:<orderpagename> (Standard: <ns>:order), Klartext:
# Kommentar eintragsname weiterer-eintragsname
Zusammenfassung: Legt die Reihenfolge der Menü-Einträge einer Namespace-Ebene fest.
Werte: ein Eintragsname je Zeile — Seitenname oder Name des Unter-Namespace, relativ zum Namespace, keine vollen IDs; Leerzeilen und #-Kommentare werden ignoriert; Duplikate zählen einmal.
Anmerkungen: Gelistete Einträge führen in Dateireihenfolge, ungelistete folgen in der Standard-Sortierung (Namespaces vor Seiten, alphabetisch, start zuerst). Die Seite wird ohne ACL-Prüfung gelesen (Sortier-Konfiguration), erscheint nie als Menü-Eintrag und sollte per hidepages verborgen sein. Schreibbar per Hand oder per Drag & Drop.
Beispiel: siehe How to: Menü-Reihenfolge festlegen.
Konfiguration
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
orderpagename | Text | order | Name der Order-Seite je Namespace |
default_depth | Zahl ≥ 0 | 1 | Vorlade-Tiefe für jedes Menü ohne eigenen dynamic-Parameter; 0 = alles vorladen |
AJAX-Endpunkte
Seit Version 1.6.0 (Design-System-Vereinheitlichung) rendert das Rendering
durchgehend über wkfluentuis geteilte tree()-Komponente
(API-Referenz) — beide
Endpunkte unten spiegeln das in ihrem Antwortformat.
plugin_wkacmenu_load
Signatur: GET lib/exe/ajax.php?call=plugin_wkacmenu_load&ns=<ns>&icons=<0|1>
Zusammenfassung: Liefert eine Ebene eines Namespace als HTML (Lazy Loading). Die darin enthaltenen Namespaces sind ihrerseits Nachlade-Knoten, scripts/treeview.js verdrahtet sie im eingefügten Ausschnitt erneut.
Antwort: rohes HTML-Fragment (Content-Type: text/html), ein einzelnes
<ul class=„wk-tree“>…</ul> — kein JSON mehr. scripts/treeview.js
(Plugin wkfluentui) lädt die URL direkt per fetch() und ersetzt damit
den leeren Platzhalter-Knoten; das Plugin selbst enthält dafür keinen
JavaScript-Code mehr. Fehlerfälle liefern einen leeren Body mit
Nicht-2xx-Status (400 fehlender ns-Parameter, 403 ACL,
503 wkfluentui nicht verfügbar) statt eines JSON-Fehlerobjekts.
Anmerkungen: Verlangt Leserecht auf die start-Seite des Namespace; die gelieferten Einträge sind ACL-gefiltert.
plugin_wkacmenu_order
Signatur: POST lib/exe/ajax.php?call=plugin_wkacmenu_order mit
wk-tree-move (bewegte Seiten-/Namespace-Start-ID), wk-tree-ref
(Ziel-ID), wk-tree-pos (before/after), sectok
(JSINFO.plugins.wkfluentui.sectok, nicht mehr ein
plugin-eigenes Token).
Zusammenfassung: Schreibt die Order-Seite des Namespace anhand einer
einzelnen Verschiebe-Operation, ausgelöst von tree()s eingebautem
nativen HTML5-Drag&Drop (scripts/treeview.js). Der Server leitet die
betroffene Namespace-Ebene selbst aus den beiden vollen, eindeutigen IDs
her (syntax_plugin_wkacmenu::orderOwnerNs()) und lehnt Verschiebungen
über Ebenen hinweg ab — anders als vor 1.6.0 wird kein Namespace-String
mehr vom Client entgegengenommen.
Antwort: kein JSON mehr — echter Formular-POST (natives
<form>-Submit von treeview.js, kein Hintergrund-fetch()), die
Antwort ist eine HTTP-Weiterleitung auf die aufrufende Seite. Bei
Erfolg ohne weiteren Hinweis (die neu einsortierte Position nach dem
Neuladen ist die Bestätigung — keine Gold-Flash-Animation mehr); bei
Fehler mit einer roten Fehlermeldung auf der Zielseite (der Fehlergrund
reist als geprüfter Query-Parameter wkacmenu_order_msg mit, da
DokuWikis msg() eine Weiterleitung nicht übersteht).
Anmerkungen: Nur Superuser; POST-only; CSRF-Token wird geprüft; jeder
abgeleitete Eintragsname wird server-seitig re-validiert (cleanID,
einteilig); Sperr-Prüfung der Order-Seite; jeder Aufruf erzeugt eine
Wiki-Revision. Die Client-Reihenfolge ist Präsentation, nie Autorisierung.
Das Weiterleitungsziel wird gegen den eigenen Host geprüft (kein offener
Redirect über einen gefälschten Referer-Header).
PHP-API
Öffentliche Methoden der Klasse syntax_plugin_wkacmenu für andere Plugins/Templates:
| Methode | Zusammenfassung |
|---|---|
buildSubTree($ns) | Baut den ACL-gefilterten, sortierten Menü-Baum eines Namespace (unbegrenzte Tiefe) — reine Datenstruktur, kein HTML |
subTreeNodes($ns, $useIcons) | Wie buildSubTree(), zusätzlich auf tree()s Node-Schema abgebildet (AJAX-Lazy-Load-Pfad seit 1.6.0; ersetzt das entfernte renderSubTree()) |
renderNavFlyout($ns, $useIcons) | Rendert einen vollständigen Baum für CSS-Hover-Flyouts — alle Knoten strukturell offen, ohne Inline-display:none; unverändert seit 1.6.0, eigener Rendering-Pfad (kein <details>, tree() kann kein hover-only Flyout) |
orderOwnerNs($id) | Ermittelt die Namespace-Ebene, deren Order-Seite eine Seiten-/Namespace-Start-ID zugeordnet ist (Order-Endpunkt, seit 1.6.0) |
orderNameForId($id) | Relativer Order-Eintragsname zu einer vollen ID (Order-Endpunkt, seit 1.6.0) |
currentOrderNames($ns) | Aktuelle Reihenfolge einer Namespace-Ebene, inkl. Order-Seite (Order-Endpunkt, seit 1.6.0) |
CSS-Klassen
Seit 1.6.0 kommt die Basisoptik (Baumstruktur, Links, aktiver Zustand,
Container-Tönung) aus wkfluentui/style.csss .wk-tree*-Klassen
(Sidebar/Auxbar-Kontrakt „Dokument“, Styles-Contract v16).
wkacmenu/style.css liefert nur noch die plugin-eigene Verfeinerung:
| Klasse | Bedeutung |
|---|---|
.acmenu / .acmenu-icons | Menü-Container (reiner CSS/JS-Scope-Hook, kein eigenes Layout mehr) |
.wk-tree | Baum-Wurzel/-Teilbaum (wkfluentui) |
.wk-tree__link / –active | Eintrag-Link, aktiver Pfad (fett + Highlight-Hintergrund) |
.wk-tree__icon | Icon-Slot; in .acmenu.acmenu-icons gedämpft, aktiver Eintrag golden |
[data-wk-key] | Eindeutige ID des Eintrags (Cookie-Zustand, Drag & Drop) — ersetzt data-oname/data-ons |
li.wk-tree__status–partial | Geschützter Zwischen-Namespace, kursiv/gedämpft, Beschriftung ohne Link (ersetzt .partial/.ns-label) |
li.wk-tree__status–divert | Namespace mit eigener Sidebar ohne lesbaren Inhalt, externer Verweis (ersetzt .divert) |
li.wk-tree__status–collection | Seitensammlung, goldenes Icon (ersetzt .collection) |
[data-wk-tree-lazy-src] | Noch nicht geladener Teilbaum (ersetzt .lazy/.loading) |
Entfallen (kein Ersatz nötig, native <details>-Semantik übernimmt):
.acmenu-up (Nach-oben-Eintrag ist ein regulärer Knoten), .open/
.closed (der open-Attributzustand von <details>), .curid
(ersetzt durch .wk-tree__link–active), .acmenu-drag/
.acmenu-sort-placeholder/.acmenu-saved (natives HTML5-Drag&Drop,
kein Griff-Element, keine Speicher-Flash-Animation mehr).
Cookie
Geöffnete Knoten liegen im Cookie plugin_wkacmenu_open_items (JSON-Array von Seiten-IDs). Das Plugin liest ihn server-seitig beim Rendern und lädt die dort verzeichneten Knoten vor — der Menüzustand übersteht Seitenwechsel ohne Flackern. Seit 1.6.0 schreibt script.js den Cookie über das native toggle-Ereignis von <details> statt über einen Klick-Handler; das ist die einzige verbliebene JavaScript-Aufgabe dieses Plugins — Baum-Rendering, Lazy-Load und Drag & Drop laufen vollständig über wkfluentui/scripts/treeview.js.
Renderpfad
Der Weg einer Menü-Ausgabe, vom Auslöser bis zum fertigen Baum. Die Schritte 2 bis 5 gehören dem Plugin, 6 bis 8 dem Bausatz — das ist die Grenze, die seit Version 1.6.0 gilt: Datenbeschaffung hier, Darstellung dort (siehe Versionsgeschichte).
| Schritt | Wo | Was passiert |
|---|---|---|
| 1 | Seitenleiste mit acmenu-Auszeichnung, oder eine Startseite mit ~~COLLECTION~~ | Auslöser |
| 2 | syntax.php | Baum aufbauen |
| 3 | syntax.php | ACL-Filter je Eintrag |
| 4 | syntax.php | Sortieren: Namensräume vor Seiten, eine order-Seite sticht |
| 5 | syntax.php | auf das Knotenschema abbilden |
| 6 | wkfluentui-Komponente tree() | HTML aus <details> / <summary> |
| 7 | script.js | Keks über das native toggle-Ereignis |
| 8 | wkfluentui-treeview.js | Nachladen sowie Ziehen und Ablegen |
| 9 | action.php, plugin_wkacmenu_load | beim Nachladen: rohes HTML-Fragment |
| 10 | action.php, plugin_wkacmenu_order | beim Ablegen: order-Seite schreiben, weiterleiten |