Zum Hauptinhalt springen

Ein eigenes Modul bauen

Module vs. Erweiterungen - der Unterschied

Ein Modul ist ein kleiner, wiederverwendbarer Baustein, der an einer benannten Position im Theme erscheint (z.B. sidebar, footer_widgets) - eine Erweiterung ist deutlich größer, bringt eigene Seiten, eigene Datenbanktabellen und oft eigene Admin-Bereiche mit.

Ordnerstruktur

repository/modules/MeinModul/
  manifest.json
  Module.php
  templates/default/module.tpl

Ein Modul liefert AUSSCHLIESSLICH Daten über getViewData() - niemals HTML direkt. Wie das Modul aussieht, entscheidet immer das Template (templates/default/module.tpl als Fallback, oder eine Theme-eigene Override-Datei module-MeinModul.tpl). Diese Trennung sorgt dafür, dass jedes Theme ein Modul optisch an sich anpassen kann, ohne die Modul-Logik selbst anfassen zu müssen.

— Wichtigste Architektur-Regel für Module

Module.php

namespace Modules\MeinModul;

use Nexis\Module\ModuleInterface;

class Module implements ModuleInterface {

    public function __construct(private readonly array $config = []) {
    }

    public function getViewData(): array {
        return [
            'text' => $config['text'] ?? 'Standardtext',
        ];
    }

    public function getName(): string {
        return 'Mein Modul';
    }
}

templates/default/module.tpl

<div class="nx-card">{$text}</div>

Eigene Admin-Seite für ein Modul (optional)

Braucht ein Modul eine eigene Verwaltungsseite (z.B. um eingegangene Daten anzusehen), zusätzlich ModuleAdminInterface implementieren - dann erscheint automatisch ein eigener Menüpunkt im Admin-Bereich, ganz ohne manifest.json-Eintrag dafür.

Zuweisung zu einer Position

Über den Admin-Bereich unter "Modul-Positionen": Modul-Typ wählen, Zielposition (z.B. sidebar), Konfiguration als JSON, sowie den Anzeige-Modus (auf allen Seiten / nur auf bestimmten / auf allen außer bestimmten).

Vollständiges Beispiel zum Herunterladen

Eine konfigurierbare Hinweisbox - genau das oben gezeigte Muster, real installierbar und getestet.

ExampleModule.zip herunterladen

Hinweis: Wer ein eigenes Modul im NexisCore-Marktplatz veröffentlichen möchte, kann optional eine market.md beilegen und den Schnellupload nutzen, statt das Formular von Hand auszufüllen. Mehr dazu: Schnellupload & market.md →