Inhaltsverzeichnis

  1. Einführung

  2. Die Dolibarr-Architektur verstehen

  3. Warum benutzerdefinierte Module entwickeln?

  4. Vorbereiten Ihrer Entwicklungsumgebung

  5. Anatomie eines Dolibarr-Moduls

    • 5.1 Der Moduldeskriptor (modMyModule.class.php)

    • 5.2 Verzeichnisstruktur

    • 5.3 Hooks, Trigger und Berechtigungen

  6. Erstellen Sie Ihr erstes Modul Schritt für Schritt

    • 6.1 Benennung und Initialisierung

    • 6.2 Hinzufügen von Menüs und Berechtigungen

    • 6.3 Erstellen von Datenbanktabellen

    • 6.4 Erstellen von Seiten und Schnittstellen

    • 6.5 Umgang mit Formularen und Aktionen

  7. Dolibarr-Hooks und -Trigger verstehen

  8. Best Practices für die Modulentwicklung

  9. Verpacken und Verteilen Ihres Moduls

  10. Verwenden der Dolibarr-API in Ihren Modulen

  11. Debuggen, Protokollieren und Wartung

  12. Häufige Fallstricke, die es zu vermeiden gilt

  13. Erweiterte Anwendungsfälle und Ideen

  14. Fazit

  15. Ressourcen für Entwickler


1. Einleitung

Dolibarr ERP & CRM hat sich dank seiner modularen Struktur und seines entwicklerfreundlichen Ökosystems zu einer weit verbreiteten Open-Source-Lösung für die Verwaltung von Geschäftsprozessen entwickelt. Einer seiner größten Vorteile ist, dass Entwickler können die Funktionalität erweitern durch benutzerdefinierte Module – ohne den Kern zu ändern.

Egal, ob Sie Funktionen für den internen Gebrauch, Kundenprojekte oder den kommerziellen Vertrieb erstellen, das Verständnis der Erstellung Ihres eigenen Dolibarr-Moduls eröffnet Ihnen endlose Möglichkeiten. Dieser Leitfaden ist speziell für Entwickler, und es befasst sich eingehend mit der Struktur, den Best Practices und der praktischen Implementierung von benutzerdefinierten Modulen für Dolibarr.

Von der Erstellung eines einfachen „Hallo Welt“-Moduls bis hin zu erweiterten Funktionen wie benutzerdefinierten Berechtigungen, REST-API-Endpunkten und dynamischen Menüs – dieser Leitfaden führt Sie durch den gesamten Prozess.


2. Die Dolibarr-Architektur verstehen

Bevor Sie Ihre erste Codezeile schreiben, ist es wichtig zu verstehen wie Dolibarr unter der Haube funktioniertDolibarr ist geschrieben in PHPund folgt einer modularen Architektur, bei der:

  • Jedes Modul ist in seinem eigenen Verzeichnis enthalten. /htdocs/custom/ or /htdocs/module_name/.

  • Module werden zur Laufzeit geladen, basierend auf dem Aktivierungsstatus im Backoffice.

  • Es verwendet a Single-Entry-Point-Struktur, wobei alle URLs durchlaufen main.inc.php zur Initialisierung.

  • Die Datenbankverwaltung erfolgt über Dolibarrs integrierte ORM-Funktionen Google Trends, Amazons Bestseller dol_sql_insert, dol_sql_update, usw.

  • Der Benutzerzugriff wird über eine granulares Berechtigungssystem Verwendung der user->rights Objekt.

Module können in vorhandene Kernfunktionen eingebunden werden, eigene Menüs hinzufügen, Vorlagen verwenden oder benutzerdefinierte Geschäftslogik erstellen.


3. Warum benutzerdefinierte Module entwickeln?

Es gibt mehrere Gründe, ein eigenes Dolibarr-Modul zu erstellen:

  • Maßgeschneiderte Funktionen: Implementieren Sie spezifische Funktionen für einzigartige Arbeitsabläufe.

  • Effizienz steigern: Automatisieren Sie Aufgaben und vereinfachen Sie Schnittstellen für Endbenutzer.

  • Datenintegrationen: Bauen Sie Brücken mit externen APIs, Buchhaltungstools oder benutzerdefinierten Dashboards.

  • Weiterverkaufen oder verteilen: Veröffentlichen am Dolistore oder GitHub, damit andere es verwenden können.

  • Aufrüstbarkeit beibehalten: Vermeiden Sie Änderungen am Kern, um sicherzustellen, dass zukünftige Dolibarr-Upgrades reibungslos verlaufen.

Anstatt den Quellcode zu manipulieren (was die Kompatibilität und Wartbarkeit beeinträchtigt), können Sie mit Modulen Dolibarr richtig erweitern.


4. Vorbereiten Ihrer Entwicklungsumgebung

Stellen Sie vor dem Start sicher, dass Sie über ein funktionierendes Entwicklungs-Setup verfügen.

4.1 Erforderliche Werkzeuge

  • PHP 7.4–8.x (abhängig von Ihrer Dolibarr-Version)

  • MySQL oder MariaDB

  • Apache oder NGINX

  • Eine lokale Entwicklungsumgebung (XAMPP, WAMP, MAMP, Docker usw.)

  • Git (empfohlen für die Versionskontrolle)

Sie möchten auch eine gute Code-Editor oder IDE wie VS-Code, PhpStorm oder Sublime Text.

4.2 Empfohlene Konfiguration

  • Klonen Sie die neueste stabile Dolibarr-Version von GitHub.

  • Erstellen Sie einen virtuellen Host, der auf /htdocs.

  • Speichern Sie Ihr Modul im /htdocs/custom/ Verzeichnis, um es von den Kernmodulen zu trennen.

  • Aktivieren Sie die Fehlerberichterstattung in Ihrem php.ini oder benutzen dolibarr_dev Konstanten zum Debuggen.

4.3 Dolibarr-Entwicklertools

Installieren oder aktivieren Sie:

  • Modul-Generator: Ein Hilfsmodul, das die Grundstruktur eines neuen Moduls erstellt.

  • Entwicklertools-Modul: Bietet Einblicke in Variablen, Hooks und Seiteninterna.

  • Web Profiler-Modul (optional): Für Leistungsbenchmarking.


5. Anatomie eines Dolibarr-Moduls

Das Verständnis der Struktur eines Moduls ist entscheidend. Ein Dolibarr-Modul besteht mindestens aus:

  • A Moduldeskriptor Datei: Definiert Metadaten und Aktivierungslogik.

  • A Verzeichnis mit Unterordnern für Seiten, Klassen, Vorlagen und SQL.

  • Optional Haken, löst und Sprachdateien.


5.1 Der Moduldeskriptor (modMyModule.class.php)

Jedes Modul beginnt mit einer Deskriptorklasse. Hier ist ein minimales Beispiel:

php

class modMyModule extends DolibarrModules { function __construct($db) { $this->numero = 104000; // Must be unique $this->rights_class = 'mymodule'; $this->family = "crm"; $this->name = "MyModule"; $this->description = "A custom module for internal use"; $this->version = '1.0'; $this->const_name = 'MAIN_MODULE_MyModule'; $this->dirs = array("/mymodule/temp"); $this->config_page_url = array("admin_mymodule.php@mymodule"); $this->menu = array(); $this->rights = array(); } }

Diese Datei teilt Dolibarr mit, wie Ihr Modul installiert, aktiviert und identifiziert wird.


5.2 Verzeichnisstruktur

Hier ist eine grundlegende Ordnerstruktur eines typischen Moduls:

bash

htdocs/custom/mymodule/ ├── class/ # PHP logic (objects, controllers) ├── core/modules/ # Custom PDF or numbering classes ├── lang/ # Language files ├── page/ # Custom pages and interfaces ├── sql/ # Install/upgrade SQL scripts ├── admin/ # Configuration pages ├── modMyModule.class.php # Main descriptor

Sie können Ordner hinzufügen für js, css, tpl (Vorlage) und lib wie benötigt.

 

6. Schrittweises Erstellen Ihres ersten Moduls

Dieser Abschnitt führt Sie durch die Erstellung eines funktionalen benutzerdefinierten Moduls von Grund auf. Ziel ist es, Ihnen einen praktischen Leitfaden zu geben, den Sie an Ihre Bedürfnisse anpassen können.


6.1 Benennung und Initialisierung

Jedes Modul muss über eine einzigartiger Name und Modulnummer. Beachten Sie die Namenskonventionen, um Konflikte zu vermeiden:

  • Nutzen Sie CamelCase für Klassen- und Modulnamen (z. B. modMyCustomModule)

  • Die Dateistruktur muss die Benennung widerspiegeln (z. B. modMyCustomModule.class.php im Stammverzeichnis)

  • Wählen Sie ein einzigartiges numero (z.B, 104001) nicht bereits von anderen Modulen verwendet

Aktivieren Sie Ihr Modul von Home > Setup > Module/Anwendungen nachdem Sie es in /htdocs/custom/.


6.2 Hinzufügen von Menüs und Berechtigungen

Dolibarr-Menüs werden im Deskriptor mit dem hinzugefügt $this->menu[] Array. Hier ist ein Beispiel für ein Haupt- und Untermenü:

php

$this->menu[] = array( 'fk_menu'=>'', // No parent menu 'type'=>'top', 'titre'=>'MyModuleMenu', 'mainmenu'=>'mymodule', 'leftmenu'=>'', 'url'=>'/mymodule/page/dashboard.php', 'langs'=>'mymodule@mymodule', 'position'=>100, 'enabled'=>'1', 'perms'=>'1', 'target'=>'', 'user'=>2 ); $this->menu[] = array( 'fk_menu'=>'mymodule', 'type'=>'left', 'titre'=>'ListItems', 'mainmenu'=>'mymodule', 'leftmenu'=>'mymodule_left', 'url'=>'/mymodule/page/list.php', 'langs'=>'mymodule@mymodule', 'position'=>101, 'enabled'=>'1', 'perms'=>'$user->rights->mymodule->read', 'target'=>'', 'user'=>2 );

Definieren Sie Berechtigungen in der gleichen Datei unter $this->rights[]:

php

$this->rights[] = array( 'id'=>104001, 'desc'=>'Read access', 'default'=>1, 'perm'=>'read' );

6.3 Erstellen von Datenbanktabellen

Das Datenbankschema wird durch SQL-Skripte initialisiert, die in /sql/.

SQL-Datei installieren: mymodule.sql

SQL

CREATE TABLE llx_mymodule_item ( rowid INT AUTO_INCREMENT PRIMARY KEY, ref VARCHAR(128), label VARCHAR(255), date_creation DATETIME, tms TIMESTAMP );

Verweisen Sie in Ihrer Beschreibung darauf:

php

$this->module_parts = array('db'=>1); $this->sql = array('/mymodule/sql/mymodule.sql');

Dolibarr führt dieses Skript bei der Installation Ihres Moduls automatisch aus.

Um Ihr Schema in späteren Versionen zu aktualisieren, fügen Sie Upgrade-SQL-Dateien hinzu:

SQL

/sql/mymodule_1.1.sql /sql/mymodule_1.2.sql

6.4 Erstellen von Seiten und Schnittstellen

Erstellen Sie einen Ordner /page/ und fügen Sie Ihre erste Schnittstelle hinzu, zB, dashboard.php.

php

require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; llxHeader('', 'My Module Dashboard'); print load_fiche_titre('Dashboard'); print '<div class="fichecenter">'; print '<p>This is your module landing page.</p>'; print '</div>'; llxFooter();

Verwenden Sie Dolibarrs UI-Helfer wie:

  • print load_fiche_titre()

  • dol_print_date()

  • dol_buildpath()

  • dol_escape_htmltag()

Dolibarr bietet Formularhelfer und Tools zum Rendern von Objektansichten, um die Konsistenz mit der Benutzeroberfläche zu gewährleisten.


6.5 Umgang mit Formularen und Aktionen

Für Seiten, die Daten ändern oder speichern, verwendet Dolibarr eine gemeinsame Controllerstruktur.

Auf Ihrer Formularbearbeitungsseite:

php

if ($_POST['action'] == 'add') { $ref = GETPOST('ref', 'alpha'); $label = GETPOST('label', 'alpha'); $sql = "INSERT INTO llx_mymodule_item (ref, label, date_creation) VALUES ('".$db->escape($ref)."', '".$db->escape($label)."', NOW())"; $res = $db->query($sql); if ($res) { setEventMessages('Item created successfully', null, 'mesgs'); } else { setEventMessages($db->lasterror(), null, 'errors'); } }

Verwenden Sie Dolibarr's GETPOST() kombiniert mit einem nachhaltigen Materialprofil. $db->escape() um Injektionsschwachstellen zu verhindern.


7. Dolibarr-Hooks und -Trigger verstehen

Dolibarr ermöglicht Ihnen Kernaktionen erweitern Verwendung:

  • Auslöser (triggerInterface)

  • Haken (hookmanager)

7.1 Trigger verwenden

Trigger werden bei Systemereignissen wie den folgenden ausgelöst:

  • BILL_CREATE

  • ORDER_VALIDATE

  • PRODUCT_DELETE

Erstellen Sie eine Datei /core/triggers/interface_99_modMyModule_MyTriggers.class.php

Ejemplo:

php

public function runTrigger($action, $object, $user, $langs, $conf) { if ($action == 'BILL_VALIDATE') { dol_syslog("My trigger executed on invoice validation"); } return 0; }

7.2 Verwenden von Hooks

Mit Hooks können Sie Inhalte in vorhandene Seiten oder Schnittstellen einfügen.

Beispielverwendung auf Ihrer Seite:

php

$hookmanager->initHooks(array('myhookarea')); $res = $hookmanager->executeHooks('doAction', $parameters, $object, $action);

Dadurch kann Ihr Modul in Ereignisse eingebunden werden, die ausgelöst werden von Dolibarr-Kern oder andere Module.

 

8. Best Practices für die Modulentwicklung

Bei der Entwicklung eines Dolibarr-Moduls geht es nicht nur darum, funktionalen Code zu schreiben – es geht darum, sauberer, wartungsfreundlicher und sicherer Code das den Konventionen von Dolibarr folgt.

8.1 Namenskonventionen einhalten

  • Verwenden Sie Kleinbuchstaben für Ordner und Großbuchstaben für Klassendateien.

  • Präfixieren Sie Ihre Tabellen mit llx_ und eine eindeutige Modulkennung.

  • Vermeiden Sie Namenskonflikte mit vorhandenen Modulen oder Kernfunktionen.

8.2 Logik und Präsentation trennen

Anwendung:

  • .php Dateien in /page/ für Schnittstellen

  • Klassen in /class/ für Geschäftslogik

  • Template in /tpl/ für das Layout

Durch Befolgen des MVC-Prinzips lässt sich Ihr Modul leichter debuggen und skalieren.

8.3 Verwenden Sie Berechtigungen sorgfältig

Programmieren Sie die Zugriffslogik nicht fest. Überprüfen Sie immer:

php

if ($user->rights->mymodule->read) { ... }

Bieten feinkörnige Berechtigungen für:

  • Lesebrillen

  • Schreiben

  • Löschen

  • Validierung

Dies gewährleistet die Kompatibilität mit der Benutzer-/Rollenarchitektur von Dolibarr.

8.4 Sichern Sie Ihre SQL- und Eingabeverarbeitung

  • Nutzen Sie GETPOST() mit entsprechenden Typfiltern.

  • Bereinigen Sie die gesamte Ausgabe mit dol_escape_htmltag() or dol_htmlentities().

  • Nutzen Sie $db->escape() für SQL-Werte.

  • Vermeiden Sie die Verwendung von Rohkost $_POST, $_GEToder nicht maskierte Werte.

8.5 Dokumentieren Sie Ihren Code

  • Fügen Sie PHPDoc-Header in Klassen und Funktionen ein.

  • Kommentieren Sie alle SQL-Abfragen und Geschäftsregeln.

  • Enthalten a README.md in Ihrem Modulordner.


9. Verpacken und Verteilen Ihres Moduls

Sobald Ihr Modul getestet und bereit ist, können Sie verpacken und teilen mit anderen.

9.1 Erforderliche Dateien für die Verteilung

Inklusive:

  • modMyModule.class.php

  • SQL-Skripte (installieren und aktualisieren)

  • A README.md Datei mit Anweisungen

  • Sprachdateien in /lang/

  • Optional: Logo, Screenshots, Lizenz und Versionsänderungsprotokoll

9.2 Vertrieb auf Dolistore

Dolistore ist der offizielle Marktplatz für Dolibarr-Module.

So reichen Sie Ihr Modul ein:

  1. Erstellen Sie .zip Datei Ihres Modulordners

  2. Stellen Sie sicher, dass es Dolibarrs Veröffentlichungsstandards

  3. Bereitstellung von Dokumentation, Kompatibilitätsversion und Kontaktinformationen

  4. Wählen Sie eine Lizenz (vorzugsweise GNU GPL v3)

  5. Senden Sie über die Dolistore-Anbieterschnittstelle

Module können verteilt werden kostenlos registrieren or kommerziell mit Lizenzkontrolle.


10. Verwenden der Dolibarr-API in Ihren Modulen

Dolibarr beinhaltet eine REST API das die programmgesteuerte Interaktion externer Tools und interner Module ermöglicht.

10.1 Aktivieren der API

Gehe zu:
Home > Setup > Module > Webdienste (API) und aktivieren Sie das Modul.

10.2 Authentifizierungsmethoden

  • API-Schlüssel (pro Benutzer definiert)

  • OAuth 2.0 (erweiterte Nutzung)

  • Stellen Sie sicher, dass alle Anfragen https://yourdomain.com/api/index.php/

10.3 Beispiel für die API-Nutzung

Alle Drittanbieter abrufen:

bash

curl -X GET https://yourdomain.com/api/index.php/thirdparties \ -H "DOLAPIKEY: your_api_key"

10.4 Verwenden der API in Ihrem Modul

Du kannst auch externe APIs nutzen in Ihrem Modul:

php

$client = curl_init('https://api.external.com/orders'); curl_setopt($client, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($client); curl_close($client); $data = json_decode($response, true);

Verwenden Sie APIs, um Daten mit folgenden Geräten zu synchronisieren:

  • E-Commerce-Plattformen (WooCommerce, PrestaShop)

  • Buchhaltungstools (Xero, QuickBooks)

  • E-Mail-Plattformen (SendGrid, Mailchimp)


11. Debugging, Protokollierung und Wartung

Durch effektives Debuggen wird sichergestellt, dass Ihr Modul stabil und produktionsbereit ist.

11.1 Fehlerbehandlung

Verwenden Sie die integrierten Fehlerfunktionen von Dolibarr:

php

$this->errors[] = "Something went wrong"; setEventMessages($this->error, $this->errors, 'errors');

Protokollieren Sie benutzerdefinierte Aktionen mit:

php

dol_syslog("MyModule: Action X executed", LOG_DEBUG);

Aktivieren Sie die Anmeldung conf.php:

php

$conf->global->MAIN_LOGTOHTML = 1;

11.2 Entwicklungskonstanten

Verwenden Sie diese, um Fehler aufzudecken:

php

define('DOLIBARR_DEV', true); define('DOL_SHOW_GLOBALS', true); define('MAIN_DISABLE_ALL_CACHE', 1);

Drehen Sie diese immer in der Produktion.


12. Häufige Fallstricke, die es zu vermeiden gilt

  • Ändern von Kerndateien – Verwenden Sie immer Module, Hooks und Overrides.

  • Überspringen von Berechtigungen – Dadurch können vertrauliche Daten offengelegt werden.

  • Versionskompatibilität ignorieren – Testen Sie Ihr Modul mit allen unterstützten Dolibarr-Versionen.

  • Hardcoding von Pfaden oder URLs - Benutzen DOL_URL_ROOT kombiniert mit einem nachhaltigen Materialprofil. dol_buildpath().

  • Schlechtes SQL-Design – Verwenden Sie Indizes, befolgen Sie Namenskonventionen und vermeiden Sie unnötig große JOINs.


13. Erweiterte Anwendungsfälle und Ideen

Wenn Sie mit den Basismodulen vertraut sind, erkunden Sie diese erweiterten Ideen:

13.1 Benutzerdefinierte PDF-Generatoren

Erstellen Sie benutzerdefinierte Dokumente (Angebote, Rechnungen, Etiketten) durch Erweiterung /core/modules/pdf/.

Definieren Sie Ihre eigene Klasse wie:

php

class pdf_mymodule extends ModelePDFXXX

13.2 Benutzerdefinierte Nummerierungsmodelle

Fügen Sie personalisierte Rechnungs- oder Bestellnummernformate hinzu, indem Sie /core/modules/xxx/ -Ordner.

13.3 Geplante Aufgaben

Nutzen Sie cron Modul zur Automatisierung von Prozessen (z. B. tägliche Backups, E-Mail-Benachrichtigungen, Stapelberichte).

Aufgaben registrieren über:

php

$this->cronjobs[] = array( 'label'=>'Daily Sync', 'jobtype'=>'method', 'class'=>'MyClass', 'method'=>'runDaily', 'parameters'=>'', 'comment'=>'Sync with external tool' );

14. Fazit

Die Erstellung Ihres eigenen Dolibarr-Moduls ermöglicht Ihnen umfassende Anpassungen und leistungsstarke Automatisierung, die auf Ihr Unternehmen oder Ihre Kunden zugeschnitten sind. Der modulare Aufbau von Dolibarr ermöglicht Ihnen die Erstellung von:

  • Benutzerdefinierte Schnittstellen

  • Dateneingabetools

  • Workflow-Automatisierung

  • REST-integrierte Lösungen

  • Dynamische PDF-Generatoren

  • Vollständige Enterprise-Funktionen – ohne Eingriff in Kerndateien

Unter Berücksichtigung bewährter Methoden, Sicherheit und Wartbarkeit können Sie professionelle Module entwickeln, die mit Dolibarr skalierbar sind und einen echten Mehrwert bieten.


15. Ressourcen für Entwickler