Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » AcMenu Plugin » Syntax- und API-Referenz

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.

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/startns sucht das Plugin aufwärts nach einer sidebar*-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 dynamic entscheidet die Einstellung default_depth (Vorgabe 1): 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_index werden 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).

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
de/wiki/dwe/wkacmenu/reference.txt · Zuletzt geändert: von 0.0.0.0