====== WvdS.DokuWiki.AcMenu Plugin ====== **Plugin:** wvdsacmenu\\ **Version:** 1.0.0\\ **Namespace:** ''lib/plugins/wvdsacmenu/''\\ **Base:** [[https://www.dokuwiki.org/plugin:acmenu|AcMenu]] by Torpedo\\ **Extensions:** Wolfgang van der Stille \\ **License:** GPL 2 ---- ===== Definition ===== The **wvdsacmenu** plugin displays an accordion menu for namespaces and pages. It extends the original AcMenu with wiki syntax, dynamic namespace detection, and multilingual support. ===== Use Cases ===== * **Namespace Navigation** - Automatic menu for documentation structure * **Multilingual Wikis** - Separate menus per language namespace * **Project Documentation** - Hierarchical navigation in sub-namespaces * **Sidebar Integration** - Compact navigation in the sidebar ---- ===== Syntax ===== {{wvds:acmenu}} {{wvds:acmenu ns="namespace"}} {{wvds:acmenu dynamic="N"}} ==== Parameters ==== ^ Parameter ^ Type ^ Default ^ Description ^ | ''ns'' | string | //(auto)// | Explicit namespace for the menu | | ''dynamic'' | integer | //(off)// | Levels above current page | ---- ===== Parameter Details ===== ==== ns - Explicit Namespace ==== Shows a specific namespace regardless of current page: {{wvds:acmenu ns="en:crypto"}} {{wvds:acmenu ns="en:docs:api"}} ==== dynamic - Dynamic Namespace ==== Calculates namespace relative to current page: ^ Value ^ Meaning ^ Example (at en:crypto:openssl:start) ^ | ''dynamic="1"'' | 1 level up | Shows ''en:crypto:openssl'' | | ''dynamic="2"'' | 2 levels up | Shows ''en:crypto'' | | ''dynamic="3"'' | 3 levels up | Shows ''en'' | ---- ===== Namespace Detection ===== ==== Sidebar Boundary Detection ==== The plugin detects namespace boundaries through ''sidebar*'' files: * ''sidebar.txt'' * ''sidebar1.txt'' * ''sidebar2.txt'' * ''sidebar_name.txt'' If a namespace contains one of these files, it is treated as a standalone area. ==== Detection Logic ==== 1. Without parameters └── Searches upward for sidebar* file └── Starts menu from that namespace 2. With ns="..." └── Uses the specified namespace directly 3. With dynamic="N" └── Calculates: current_namespace - N levels └── Shows from that point ---- ===== Examples ===== ==== Example 1: Automatic Menu ==== **Requirement:** Menu should automatically show current namespace area. **sidebar1.txt:** ~~NOCACHE~~ {{wvds:snippet>go_back}} {{wvds:acmenu}} **Result:** * Plugin searches upward for sidebar* file * Starts menu from found namespace * Shows all sub-namespaces and pages ==== Example 2: Language Namespace ==== **Requirement:** Menu for English documentation area. **en/sidebar1.txt:** ~~NOCACHE~~ {{wvds:snippet>go_back}} {{wvds:acmenu dynamic="2"}} **Result at en:crypto:openssl:start:** * ''dynamic="2"'' goes 2 levels up * Starts at ''en:crypto'' * Shows all crypto documentation ==== Example 3: Explicit Namespace ==== **Requirement:** Always show the same namespace. {{wvds:acmenu ns="en:api"}} **Result:** * Always shows ''en:api'' regardless of current page * Useful for fixed navigation blocks ==== Example 4: Multilingual Structure ==== **Structure:** / ├── sidebar.txt (Main menu) ├── de/ │ ├── sidebar1.txt ({{wvds:acmenu dynamic="2"}}) │ ├── crypto/ │ │ ├── sidebar1.txt ({{wvds:acmenu dynamic="1"}}) │ │ └── openssl/ │ └── docs/ ├── en/ │ ├── sidebar1.txt │ └── ... └── sl/ ├── sidebar1.txt └── ... ---- ===== Typical Sidebar Configuration ===== ==== Root: sidebar.txt ==== ~~NOCACHE~~ {{wvds:snippet>main_menu}} ==== Language Namespace: en/sidebar1.txt ==== ~~NOCACHE~~ {{wvds:snippet>go_back}} {{wvds:acmenu dynamic="2"}} ==== Sub-Namespace: en/crypto/sidebar1.txt ==== ~~NOCACHE~~ {{wvds:snippet>go_back}} {{wvds:acmenu dynamic="1"}} ---- ===== How It Works ===== ==== Processing Pipeline ==== 1. Parameter Evaluation ├── ns="" → Use explicit namespace ├── dynamic="N" → Calculate namespace └── (empty) → Search sidebar* upward 2. Namespace Resolution └── Determine start namespace for menu └── Check access permissions 3. Tree Building └── Read all pages and sub-namespaces └── Filter by access permissions └── Sort alphabetically 4. HTML Generation └── Create nested