6.1 KiB
6.1 KiB
Projektkontext: Modul-Entwicklung
- Modul-Konzept
- Jedes klassische Modul lebt unter
/modules/<modulname>/. - Pflicht-Dateien sind in der Regel:
module.jsonbootstrap.phppages/*.phpassets/*
- Modulspezifische Assets
- Modul-JS und Modul-CSS müssen im Modul-Ordner liegen.
- Laden über Modul-Assets, zum Beispiel:
$assets->addStyle('/module/pi_control/asset?file=pi_control.css');$assets->addScript('/module/pi_control/asset?file=hosts.js', 'footer', true);
- Keine modulspezifischen Änderungen in
/public/assets/*.
- Scope-Regeln
- Modul-Aufgaben: nur
/modules/<modul>/und gegebenenfalls/tools/<modul>ändern - globale Layouts:
/partials/structure/und/public/assets/css/app.css - Konfigurationslogik nur bei echtem Globalbedarf in
/config/oder/src/
- UI-Regeln für Module
- Modulseiten sollen diesem Muster folgen:
- Seitenheader-Box
- Submenü-Box
- danach Bereichs-Boxen und/oder Karten-Boxen
Setupgehört in Modulen grundsätzlich in die Submenü-Box- die Optik von Submenü-Aktionen kommt ausschließlich aus dem globalen CSS
- Module dürfen dort keine eigenen Farb- oder Variantenlogiken einschleusen
- Globales Setup-System
- Modul-Setup wird zentral über
partials/landingpages/modules/setup.phpgerendert. - Die Bereiche
AllgemeinDatenbankZugriffsrechteCron Einstellungenmüssen für alle Module aus dieser gemeinsamen Setup-Logik kommen.
- Nur
Custom Settingsdarf modulspezifischen Inhalt enthalten. - Modul-spezifische Sonderlayouts für die Bereiche
Allgemein,Datenbank,ZugriffsrechteoderCron Einstellungensind nicht erlaubt.
Was global im Setup bereits verfügbar ist:
- gemeinsame Setup-Navigation mit festen Unterseiten
- rechte Aktionsseite mit
Nexus ÜbersichtZurück zum Modul
- gemeinsames Speichern pro Bereich
- gemeinsames Rendering von
- Textfeldern
- Zahlenfeldern
- Checkboxen
- Selects
- Multiselects
- Textareas
- globale
Debug aktivieren-Option pro Modul im BereichAllgemein - gemeinsame Datenbank-Logik mit
Eigene Modul-DB nutzen- Anzeige oder Verbergen der Custom-DB-Felder
- optional mehreren DB-Gruppen wie
db.*undmetadata_db.* Verbindung testenStandardwerte laden
- gemeinsame Auth- und Zugriffslogik mit
Login erforderlich- erlaubten Benutzern
- erlaubten Gruppen
- bekannten Keycloak-Benutzern und -Gruppen
- gemeinsame Cron- und Scheduler-Logik mit
- Anzeige von Intervall-Tasks
- Anzeige von Cron-Jobs
- Bearbeiten von Cron-Einträgen im Modal
- Cron-Test direkt aus dem Setup
- Mehrfacheinträgen bei
mode = multi - Modul-Zeitzonen-Override für Crons
- Vererbung globaler Cron-Zeitzonen-Defaults
- gemeinsame Darstellung von Setup-Aktionen und Statusblöcken
- globale Zeitzonen-Datalist aus
nexus_timezones
- Was ein Modul für das Setup liefern darf
module.jsonmitsetup.fields- optional
setup.sections.database - optional
interval_tasks - optional
scheduler_jobs - optional
auth - optional Bootstrap-Funktionen:
setup_actionsrun_setup_actionsetup_statusruntime_settingssave_runtime_settings
- Was ein Modul nicht selbst bauen darf
- eigene Setup-Seitenstruktur für
Allgemein,Datenbank,Zugriffsrechte,Cron Einstellungen - eigene DB-Toggle-Logik für Standard und Custom
- eigene Cron-Editor-Grundlogik
- eigene Debug-UI-Grundlogik
- eigene globale Zeitzonen-Defaults
- Setup-Navigation
- Setup-Routen laufen zentral über:
/modules/setup/<modul>/general/modules/setup/<modul>/database/modules/setup/<modul>/access/modules/setup/<modul>/cron/modules/setup/<modul>/custom
Setupgehört in der Modulansicht in die rechte Aktionsseite der Submenü-Box
- Steuerung per
module.json
- Ein Modul kann über
setup.sections.database: true|falsesteuern, ob der MenüpunktDatenbankangezeigt wird. - Wenn
setup.sections.databasefehlt, kann die zentrale Setup-Logik den Punkt implizit aktivieren, sobald DB-Felder vorhanden sind. - Modulfelder für
Allgemein,Datenbank,CronundCustom Settingswerden zentral nach Feldnamen aufgeteilt:debug_enabled->Allgemeinuse_separate_dbunddb.*odermetadata_db.*->Datenbankschedule_timezone->Cron Einstellungen- alle übrigen Setup-Felder ->
Custom Settings
Weitere anerkannte Setup-Bausteine:
interval_tasksscheduler_jobsauthdb_defaultsmetadata_db_defaults
- Speicherregel
- Beim Speichern eines Setup-Bereichs dürfen nur die in diesem Bereich sichtbaren Felder aktualisiert werden.
- Felder aus anderen Bereichen dürfen nicht mit
null,0oder leeren Strings überschrieben werden.
- Datenbankbereich
Eigene Modul-DB nutzenist der zentrale Standard-Schalter für Module mit optionaler eigener DB.- Wenn der Schalter deaktiviert ist, dürfen keine Custom-DB-Eingabefelder sichtbar sein.
- Datenbankaktionen und Tabellenstatus gehören in den Menüpunkt
Datenbank, nicht inCustom Settings.
- Globale PHP-Helfer für Module
- Neue Module sollen für zentrale Zeit- und Debug-Defaults nach Möglichkeit die globalen Funktionen aus
src/App/functions.phpnutzen:nexus_settings()nexus_save_settings(array $settings)nexus_system_timezone_name()nexus_display_timezone_name()nexus_cron_timezone_name()module_debug_enabled(string $module)module_debug_push(string $module, array $entry)module_debug_clear(string $module)
- Regeln für neue Module
- Keine Zeitzone wie
Europe/Berlinhart im Modul als Standard erzwingen, wenn dafür ein globaler Nexus-Default existiert. - Für Anzeige- und Formatierungslogik nach Möglichkeit
nexus_display_timezone_name()nutzen. - Für Cron-Fallbacks nach Möglichkeit
nexus_cron_timezone_name()nutzen. - Neue Module dürfen keine lokalen Zeitzonen direkt in Datenbank-Zeitspalten persistieren.
- Pi-Control-Besonderheiten
- Worker und Jobs unter
/tools/pi_control/ - Check-Updates und Cron nutzen die gleichen SSH-Routinen
- Host-Karten, Befehle und Konsole sind UI im Modul
- Update- und Upgrade-Checks liefern Debug-Ausgaben, die als Tooltip oder Debugzeile angezeigt werden