Inhaltsverzeichnis
-
Einführung
-
Was sind Hooks in Dolibarr?
-
Arten von Hooks: Schnittstelle vs. Geschäftsereignisse
-
Wann sollten Sie einen Haken verwenden?
-
Die Hook-Systemarchitektur von Dolibarr verstehen
-
Einrichten eines Hooks in einem benutzerdefinierten Modul
-
Registrieren von Hook-Kontexten im Moduldeskriptor
-
Namenskonventionen für Hook-Methoden
-
UI-Hooks: Benutzeroberflächen verbessern
-
Daten-Hooks: Erfassen von Ereignissen der Kerngeschäftslogik
-
Praktische Beispiele für nützliche Hooks
-
Erstellen einer Hook-Datei und Strukturieren Ihrer Logik
-
Zugriff auf Dolibarr-Objekte von einem Hook aus
-
Verketten von Hooks über mehrere Module hinweg
-
Leistungsüberlegungen und Best Practices
-
Debugging-Hooks: Tools und Tipps
-
Sicherheitsimplikationen der Hook-Logik
-
Integration von Drittsystemen über Hooks
-
Hook-Kompatibilität während Dolibarr-Upgrades
-
Abschließende Gedanken
1. Einleitung
Dolibarr ist flexibel, modular und hochgradig erweiterbar. Eines der leistungsstärksten Werkzeuge seiner Architektur ist die HakensystemMit Hooks können Entwickler ihre eigene Logik in die Anwendung einbringen, ohne den Kerncode zu ändern. Ob Sie Anzeigen anpassen, Daten validieren oder mit externen Systemen synchronisieren – Hooks bieten eine saubere und effiziente Methode für eine umfassende Integration.
2. Was sind Hooks in Dolibarr?
Hooks sind im Dolibarr-Kern definierte Einstiegspunkte, die es externen Modulen ermöglichen, sich in die Anwendung einzuklinken und Verhalten hinzuzufügen oder zu ändern. Es handelt sich um Funktionsaufrufe, die bei bestimmten Ereignissen dynamisch ausgelöst werden.
Es gibt zwei Hauptkategorien:
-
Schnittstellen-Hooks: Beeinflussen, was der Benutzer sieht (Menüs, Schaltflächen, Seiten).
-
Geschäfts-/Event-Hooks: Logik während Datenänderungen ausführen (Erstellen, Aktualisieren, Löschen).
3. Arten von Hooks: Schnittstelle vs. Geschäftsereignisse
| Typ | Zweck | Beispiel |
|---|---|---|
| UI-Hook | Benutzeroberfläche ändern oder erweitern | Registerkarte zur Rechnungsseite hinzufügen |
| Geschäft | Triggerlogik bei Ereignis | Protokollieren Sie jedes Produktupdate |
Einige Hooks sind rein visuell, andere ermöglichen die Ausführung einer Betriebslogik für Dolibarr-Ereignisse.
4. Wann sollten Sie einen Haken verwenden?
Verwenden Sie einen Hook, wenn Sie Folgendes tun müssen:
-
Fügen Sie vorhandenen Dolibarr-Seiten eine benutzerdefinierte Registerkarte oder Schaltfläche hinzu.
-
Fügen Sie beim Speichern von Datensätzen eine zusätzliche Validierung ein.
-
Protokollieren, synchronisieren oder reagieren Sie auf Änderungen an Geschäftsobjekten.
-
Erweitern Sie das Verhalten eines Kernprozesses, ohne den Kerncode zu ändern.
Vermeiden Sie die Verwendung von Hooks für Logik, die nichts mit Dolibarr-Kernereignissen zu tun hat, oder wenn die Leistung kritisch ist und eine direkte Überschreibung besser geeignet ist.
5. Dolibarrs Hook-Systemarchitektur verstehen
Der Hook-Mechanismus von Dolibarr ist objektorientiert. Module können Hook-Klassen definieren, die erweitern DolibarrHooks und implementieren Sie Methoden, die den Zielkontexten entsprechen.
Jedes Modul kann eine Klasse im hook/ Verzeichnis:
/custom/mymodule/hook/interface_99_modmymodule_common.php
6. Einrichten eines Hooks in einem benutzerdefinierten Modul
-
Erstellen Sie eine neue PHP-Datei in Ihrem Modul
hook/Verzeichnis. -
Definieren Sie eine Klasse, die der Namenskonvention entspricht.
-
In Ihrem Moduldeskriptor (
modMymodule.class.php), registrieren Sie die Hook-Kontexte:
$this->hooks = array('invoicecard', 'thirdpartycard');
7. Registrieren von Hook-Kontexten im Moduldeskriptor
Hook-Kontexte teilen Dolibarr mit, wo Ihr Hook angewendet werden soll. Gängige Kontexte sind:
-
invoicecard -
ordercard -
thirdpartycard -
propalcard
Diese entsprechen Schnittstellenbildschirmen oder Objekttypen.
8. Namenskonventionen für Hook-Methoden
Hooks folgen bestimmten Methodenbenennungsmustern. Beispiel:
function formObjectOptions($parameters, &$object, &$action, $hookmanager) {
// Custom logic here
}
Der Methodenname muss mit dem Kern-Hook-Trigger übereinstimmen. Dolibarr ruft Ihre Methode auf, falls vorhanden.
9. UI-Hooks: Benutzeroberflächen verbessern
Anwendungen:
-
addMoreActionsButtons: Schaltflächen zum Formular hinzufügen -
printObjectLine: HTML in eine Zeilenansicht einfügen -
formObjectOptions: Neue Felder zu Formularen hinzufügen
Auf diese Weise können Sie die Benutzeroberfläche erweitern, ohne Vorlagen zu überschreiben.
10. Daten-Hooks: Erfassen von Ereignissen der Kerngeschäftslogik
Sie können auf Ereignisse im Lebenszyklus eines Objekts reagieren:
-
doActions: Benutzerdefinierte Aktionsverarbeitung -
addMoreTabs: Neue Registerkarten zu einer Karte hinzufügen -
beforeObjectSave,afterObjectSave
Verwenden Sie diese zur Validierung, Protokollierung oder Benachrichtigung.
11. Praktische Beispiele für nützliche Hooks
-
Protokollieren Sie jede neue Rechnungserstellung in einer benutzerdefinierten Tabelle
-
Bei überfälligen Vorschlägen ein Warnbanner anzeigen
-
Fügen Sie der Rechnungsseite eine benutzerdefinierte PDF-Exportoption hinzu
-
Senden Sie einen Webhook an ein anderes System, wenn ein Drittanbieter aktualisiert wird
12. Erstellen einer Hook-Datei und Strukturieren Ihrer Logik
Struktur:
class InterfaceModmymoduleCommon {
function formObjectOptions($parameters, &$object, &$action, $hookmanager) {
echo '<tr><td>Custom Field</td><td><input type="text" name="customfield"></td></tr>';
return 1;
}
}
Immer zurückkehren 0 or 1 um anzugeben, ob Dolibarr das Standardverhalten fortsetzen soll.
13. Zugriff auf Dolibarr-Objekte von einem Hook aus
Dolibarr übergibt das aktive Objekt (Rechnung, Drittpartei usw.) über die $object Parameter. Sie können:
-
Daten lesen:
$object->ref,$object->id -
Ändern Sie:
$object->note_private = 'new note' -
Überprüfen Sie die Logik vor dem Speichern
14. Verketten von Hooks über mehrere Module hinweg
Mehrere Module können denselben Hook-Kontext registrieren. Dolibarr führt jedes Modul nacheinander aus:
-
mymodule -
customaddon -
thirdmodule
Vermeiden Sie Nebenwirkungen, die den gemeinsamen Status beeinträchtigen (z. B. nicht festgelegte globale Variablen).
15. Leistungsüberlegungen und Best Practices
-
Halten Sie die Hook-Logik effizient
-
Minimieren Sie Datenbankabfragen
-
Cache-Werte bei mehrmaliger Wiederverwendung
-
Vermeiden Sie die Ausgabe großer HTML-Blöcke, sofern nicht erforderlich
Schwere Hooks können die Seitenladezeit beeinträchtigen.
16. Debugging-Hooks: Tools und Tipps
-
Nutzen Sie
dol_syslog()um die Ausführung des Hooks zu protokollieren -
Überprüfen Sie Dolibarrs Debug-Protokolle in
/documents/admin/system.log -
Variablen vorübergehend ausgeben mit
var_dump()orprint_r()
17. Sicherheitsimplikationen der Hook-Logik
-
Validieren Sie alle Benutzereingaben innerhalb von Hooks
-
Bereinigen Sie die Ausgabe, bevor Sie HTML wiederholen
-
Vertrauen Sie niemals Werten von $_POST/$_GET ohne
GETPOST() -
Überprüfen Sie die Berechtigungen, bevor Sie Aktionen ausführen
Hooks können ausgenutzt werden, wenn sie sensible Aktionen offenlegen.
18. Integration von Drittsystemen über Hooks
Häufige Muster:
-
Senden Sie API-Anfragen an
afterObjectCreate -
Speichern Sie Daten in externen Systemen auf
afterObjectUpdate -
Push-Nachrichten an Warteschlangen (z. B. RabbitMQ)
Verwenden Sie Hooks, um Dolibarr in Microservice-Architekturen oder SaaS-Plattformen zu integrieren.
19. Hook-Kompatibilität während Dolibarr-Upgrades
Beim Upgrade von Dolibarr:
-
Überprüfen Sie die Änderungsprotokolle auf Änderungen an der Hook-Methode
-
Testen Sie Ihre Module in Staging-Umgebungen
-
Vermeiden Sie es, sich auf undokumentierte Hooks oder interne Objekte zu verlassen
Dolibarr gewährleistet die Abwärtskompatibilität, kann jedoch keine Garantie für interne Änderungen geben.
20. Letzte Gedanken
Hooks bilden die Grundlage der Erweiterbarkeit von Dolibarr. Sie ermöglichen Entwicklern leistungsstarke Anpassungen, ohne den Kern zu verändern. Ihre Beherrschung ist unerlässlich für die Entwicklung fortgeschrittener Module, die Integration von Drittanbietern und eine saubere, skalierbare Geschäftslogik.
Nutzen Sie die Hooks, um Dolibarr genau an Ihre Bedürfnisse anzupassen – und zwar auf die richtige Art und Weise.
