Skip to content

Doku Designer Dynamische Menüs

René Schirmer edited this page Jun 29, 2024 · 61 revisions

Dynamische Menüs

Diese Dokumentation beschreibt die Integrierung eines dynamischen Menüs in das eigene Layout auf Basis von Ilch v.2.2.0 und Bootstrap 5.3 oder neuer.


Inhaltsverzeichnis

Menü Parameter

  • Menü-Nummer

Mit dem ersten Parameter, hier die "1", wird festgelegt, um welches Menü es sich in Bezug auf die Einrichtung im Backend / Adminbereich handelt.

  • Titel

Der Aufbau erfolgt in diesem Beispiel auf Bootstrap "card" als flexibler Container. In der Kopfzeile mit der Klasse "card-header" wird der Titel des Menüs oder der jeweiligen eingebundenen Boxen dynamisch mit der Variable "%s" eingesetzt.

  • Inhalt

Der zweite Parameter "%c", welcher mit der Klasse "card-body" eingefügt ist, enthält das HTML-Gerüst für die Ausgabe der einzelnen Menüpunkte oder eines Boxeninhaltes.

  • Menü-Parameter

Die Beschreibung der einzelnen Parameter wurde dem nun folgenden Quellcode hinzugefügt.

<?=$this->getMenu
(
    1,
    '<div class="card mb-3">
        <div class="card-header">%s</div>
        <div class="card-body">%c</div>
    </div>', [
        'menus' => [
            // Integriert eine Klasse in alle <ul>'s in Ebene 1
            'ul-class-root' => '',

            // Integriert eine Klasse in alle <ul>'s ab Ebene 2
            'ul-class-child' => '',

            // Integriert eine Klasse in alle <li>'s in Ebene 1
            'li-class-root' => '',

            // Integriert eine Klasse in alle <li>'s ab Ebene 2
            'li-class-child' => '',

            // Integriert eine Klasse in dem aktiven Menüpunkt
            'li-class-active' => '',

            // Integriert eine Klasse in alle <a>'s ab Ebene 1
            'a-class' => '',

            // Integriert eine Klasse in alle <span>'s ab Ebene 1
            'span-class' => '',

            // Erlaubt "true" oder verbietet "false" eine Menüverschachtelung / Untermenüpunkt
            'allow-nesting' => true,
        ],
        'boxes' => [
            // Erlaubt "true" oder verbietet "false" das Anzeigen von Boxen in diesem Menü
            'render' => true,
        ],
    ]
); ?>

Vertikales Menü

Zuerst zum Vergleich die Menüeinstellung im Backend / Adminbereich

menu_backend

  1. Hier nun ein Beispiel eines vertikalen Menü´s mit erlaubten Boxen und verbotenen Untermenüpunkten, sowie Basis von Bootstraps "list-group" als flexible Anzeige einer Reihe von Inhalten:
<?=$this->getMenu
(
    1,
    '<div class="card mb-3">
        <div class="card-header">%s</div>
        <div class="card-body">%c</div>
    </div>', [
        'menus' => [
            'ul-class-root' => 'list-group list-group-flush',
            'ul-class-child' => 'list-group list-group-flush my-2',
            'li-class-root' => 'list-group-item list-group-item-action pe-0',
            'li-class-child' => 'list-group-item list-group-item-action',
            'li-class-active' => 'active',
            'a-class' => 'nav-link',
            'allow-nesting' => false,
        ],
        'boxes' => [
            'render' => true,
        ],
    ]
); ?>

vertmenu1

  1. Nun wenn man die Boxen verbietet:
<?=$this->getMenu
(
    1,
    '<div class="card mb-3">
        <div class="card-header">%s</div>
        <div class="card-body">%c</div>
    </div>', [
        'menus' => [
            'ul-class-root' => 'list-group list-group-flush',
            'ul-class-child' => 'list-group list-group-flush my-2',
            'li-class-root' => 'list-group-item list-group-item-action pe-0',
            'li-class-child' => 'list-group-item list-group-item-action',
            'li-class-active' => 'active',
            'a-class' => 'nav-link',
            'allow-nesting' => false,
        ],
        'boxes' => [
            'render' => false,
        ],
    ]
); ?>

vertmenu2

  1. Nun wenn man die Boxen und Untermenüpunkte erlaubt:
<?=$this->getMenu
(
    1,
    '<div class="card mb-3">
        <div class="card-header">%s</div>
        <div class="card-body">%c</div>
    </div>', [
        'menus' => [
            'ul-class-root' => 'list-group list-group-flush',
            'ul-class-child' => 'list-group list-group-flush my-2',
            'li-class-root' => 'list-group-item list-group-item-action pe-0',
            'li-class-child' => 'list-group-item list-group-item-action',
            'li-class-active' => 'active',
            'a-class' => 'nav-link',
            'allow-nesting' => true,
        ],
        'boxes' => [
            'render' => true,
        ],
    ]
); ?>

vertmenu3

  1. Nun mal ein Beispiel auf Bootstraps Navigationskomponente "nav" mit erlaubten Boxen und Untermenüpunkten:
<?=$this->getMenu
(
    1,
    '<div class="card mb-3">
        <div class="card-header">%s</div>
        <div class="card-body">%c</div>
    </div>', [
        'menus' => [
            'ul-class-root' => 'nav nav-pills flex-column',
            'ul-class-child' => '',
            'li-class-root' => 'nav-item',
            'li-class-child' => 'nav-item',
            'li-class-active' => '',
            'a-class' => 'nav-link',
            'allow-nesting' => true,
        ],
        'boxes' => [
            'render' => true,
        ],
    ]
); ?>

vertmenu4

Man sieht somit, dass es viele verschiedene Möglichkeiten gibt. Es müssen auch keine Bootstrap Klassen sein, es können eigene CSS Klassen definiert und ins Menü eingebunden werden. Insbesondere stellt das Nesting (Erlauben von Untermenüpunkten) und eine optisch schöne Einbindung eine kleine Herausforderung dar.

Horizontales Menü

Wiki für ilch-2

Benutzer

  • Inhaltsverzeichnis
    Hier findet man u.a. die Installationsanleitung, sowie Fehler- und Problem-behebungen

Entwickler

  • Inhaltsverzeichnis
    Hier findet man Informationen zum Script, Konzept und dem Programmierstil

Designer

  • Inhaltsverzeichnis
    Hier findet man Informationen über den Aufbau und Anpassung von Layouts und Modulen

Video-Tutorials


Clone this wiki locally