Πίνακας περιεχομένων

  1. Εισαγωγή

  2. Τι είναι μια ενότητα Dolibarr;

  3. Η βασική αρχιτεκτονική του Dolibarr

  4. Πώς εντάσσονται οι ενότητες στην αρχιτεκτονική του Dolibarr

  5. Δομή καταλόγου και αρχείου μιας τυπικής ενότητας

  6. Ο Ρόλος του Περιγραφέα Ενότητας

  7. Hooks, Triggers και Events: Επέκταση Βασικής Λειτουργικότητας

  8. Διαχείριση πινάκων βάσης δεδομένων σε ενότητες

  9. Δημιουργία διεπαφών: Σελίδες, φόρμες, πρότυπα

  10. Ενσωμάτωση με βασικές λειτουργίες (μενού, δικαιώματα, PDF)

  11. Βέλτιστες πρακτικές για προσαρμογή χωρίς βασική τροποποίηση

  12. Συνηθισμένα λάθη και πώς να τα αποφύγετε

  13. Προηγμένα σενάρια προσαρμογής

  14. Διατήρηση συμβατότητας σε όλες τις εκδόσεις του Dolibarr

  15. Συμπέρασμα

  16. Πόροι και αναφορές για προγραμματιστές


1. Εισαγωγή

Το Dolibarr ERP & CRM έχει γίνει μια ευρέως υιοθετημένη πλατφόρμα διαχείρισης επιχειρήσεων ανοιχτού κώδικα λόγω της ευελιξίας, της επεκτασιμότητας και της ευκολίας χρήσης του. Αυτό που κάνει το Dolibarr ιδιαίτερα ισχυρό είναι το Αρθρωτή αρχιτεκτονικήΑυτός ο σχεδιασμός επιτρέπει στους προγραμματιστές και τις εταιρείες να προσαρμόστε και επεκτείνετε το λογισμικό χωρίς να τροποποιήσει τα βασικά αρχεία—εξασφαλίζοντας ένα σταθερό περιβάλλον ασφαλές για αναβάθμιση.

Αυτό το άρθρο παρέχει ένα εμβάθυνση στην αρχιτεκτονική των μονάδων Dolibarr, βοηθώντας τους προγραμματιστές και τους επαγγελματίες πληροφορικής να κατανοήσουν πώς λειτουργούν οι ενότητες στο παρασκήνιο. Είτε σχεδιάζετε να δημιουργήσετε μια νέα ενότητα από την αρχή είτε να προσαρμόσετε υπάρχουσες, αυτός ο οδηγός θα σας δώσει μια λεπτομερή κατανόηση του πώς να το κάνετε αποτελεσματικά, επαγγελματικά και σύμφωνα με τις βέλτιστες πρακτικές.


2. Τι είναι μια ενότητα Dolibarr;

A ενότητα Το Dolibarr είναι ένα αυτοτελές πακέτο που προσθέτει νέες λειτουργίες στο σύστημα ERP. Αυτές θα μπορούσαν να κυμαίνονται από:

  • Δημιουργία νέων επιχειρηματικών αντικειμένων (π.χ. συμβόλαια, εισιτήρια, πιστοποιήσεις)

  • Προσθήκη νέων αναφορών ή πινάκων ελέγχου

  • Ενσωμάτωση με API τρίτων κατασκευαστών

  • Τροποποίηση υπαρχουσών ροών εργασίας ή διεπαφών χρήστη

Οι ενότητες επιτρέπουν και τα δύο διεπαφή χρήστη (UI) και back-end (λογική, βάση δεδομένων) αλλαγές διατηρώντας παράλληλα τη συμβατότητα με τον κύκλο αναβάθμισης του Dolibarr.

Οι ενότητες μπορούν να είναι:

  • Βασικές ενότητεςΑποστέλλεται με το Dolibarr από προεπιλογή

  • Ενότητες τρίτων κατασκευαστών: Εγκατεστημένο από το Dolistore ή προσαρμοσμένης ανάπτυξης

  • Προσαρμοσμένες/ιδιωτικές ενότητες: Κατασκευασμένο για εσωτερική χρήση, διαμονή σε /htdocs/custom/


3. Η βασική αρχιτεκτονική του Dolibarr

Το Dolibarr είναι κατασκευασμένο κυρίως με PHP και τρέχει σε μια στοίβα LAMP ή LEMP. Η αρχιτεκτονική του βασίζεται σε:

  • Αρχιτεκτονική ενιαίας εισόδου: Όλα τα αιτήματα περνούν main.inc.php

  • Δομή τύπου MVC: Χαλαρά μοντελοποιημένο με αντικείμενα, ελεγκτές, πρότυπα

  • Αρθρωτό στρώμαΟι ενότητες φορτώνονται δυναμικά και προσθέτουν λειτουργικότητα κατά τον χρόνο εκτέλεσης

  • Μοντέλο ασφαλείας που βασίζεται σε δικαιώματα

  • Παγκόσμια διαμόρφωση μέσω $conf και $user αντικειμένων

  • Επίπεδο αφαίρεσης βάσης δεδομένων χτισμένο σε ακατέργαστη SQL με βοηθητικές συναρτήσεις

Κάθε στοιχείο του Dolibarr—είτε πρόκειται για τιμολόγια, πελάτες είτε για προϊόντα—κατασκευάζεται χρησιμοποιώντας ένα βασικό μοντέλο αντικειμένου που μπορεί να επεκταθεί μέσω ενοτήτων.


4. Πώς εντάσσονται οι ενότητες στην αρχιτεκτονική του Dolibarr

Οι ενότητες βρίσκονται πάνω από την βασική εφαρμογή και αλληλεπιδρούν με αυτήν μέσω:

  • Ακροατές συμβάντων (εναύσματα)

  • Hooks (πρόσθετα σε επίπεδο διεπαφής)

  • Προσαρμοσμένες σελίδες και φόρμες

  • Δικαιώματα και προσθήκες μενού

  • Επεκτάσεις πίνακα βάσης δεδομένων

  • Τελικά σημεία REST API (Προαιρετικό)

Όταν ενεργοποιείται μια ενότητα, το Dolibarr φορτώνει δυναμικά:

  • Τα μενού του

  • Δικαιώματα

  • Προσαρμοσμένες διαμορφώσεις

  • Σκανδάλες και άγκιστρα

  • Προσαρμοσμένα αντικείμενα (κλάσεις, πρότυπα, φόρμες)

Αυτός ο διαχωρισμός διασφαλίζει καθαρή ανάπτυξη αρθρωτών μονάδων και προσαρμογή με ασφάλεια αναβάθμισης.


5. Δομή καταλόγου και αρχείου μιας τυπικής ενότητας

Κατανόηση του δομή μιας ενότητας είναι απαραίτητη για την σωστή προσαρμογή.

Ακολουθεί μια ανάλυση ενός τυπικού φακέλου ενότητας που βρίσκεται στο /htdocs/custom/mymodule/:

Πύθων

mymodule/ ├── admin/ # Backend config pages ├── class/ # PHP class files (business logic) ├── core/ │ └── triggers/ # System triggers │ └── modules/ # PDF, numbering modules ├── lang/ # Language translation files ├── page/ # Custom user-facing pages ├── sql/ # Install and upgrade SQL scripts ├── tpl/ # Template files for UI ├── modMyModule.class.php # Module descriptor

Κάθε φάκελος παίζει έναν ξεχωριστό ρόλο στην ενεργοποίηση της λειτουργικότητας, διατηρώντας παράλληλα την ενότητα οργανωμένη και συντηρήσιμη.


6. Ο Ρόλος του Περιγραφέα Ενότητας

Στην καρδιά κάθε ενότητας Dolibarr βρίσκεται η κλάση περιγραφέα, που συνήθως ονομάζεται modMyModule.class.php.

Αυτό το αρχείο περιέχει:

  • Βασικά μεταδεδομένα (όνομα, αριθμός, έκδοση, περιγραφή)

  • Ενεργοποίηση/απενεργοποίηση λογικής

  • Ορισμοί μενού

  • Δηλώσεις δικαιωμάτων

  • URL σελίδας διαμόρφωσης

  • Ορισμοί σχήματος βάσης δεδομένων

  • Γάντζοι, εναύσματα και εργασίες cron

Παράδειγμα αποσπάσματος:

php

class modMyModule extends DolibarrModules { public function __construct($db) { $this->numero = 104100; // Unique ID $this->rights_class = 'mymodule'; $this->family = "projects"; $this->name = "MyModule"; $this->description = "A module to manage certifications."; $this->version = '1.0.0'; $this->const_name = 'MAIN_MODULE_MyModule'; $this->dirs = array("/mymodule/temp"); $this->config_page_url = array("admin_mymodule.php@mymodule"); $this->menu = array(); // Add menus $this->rights = array(); // Add permissions } }

Αυτό το αρχείο εκτελείται όταν η ενότητα ενεργοποιηθεί στον πίνακα διαχείρισης.


7. Hooks, Triggers και Events: Επέκταση Βασικής Λειτουργικότητας

Το Dolibarr παρέχει δύο βασικούς μηχανισμούς για την επέκταση της βασικής λειτουργικότητας. χωρίς να το τροποποιήσω:

7.1 Ενεργοποιητές

Οι εναύσματα είναι ακροατές συμβάντων που εκτελούνται κατά τη διάρκεια ενεργειών συστήματος, όπως:

  • Δημιουργία τιμολογίων

  • Διαγραφή προϊόντων

  • Επικύρωση παραγγελιών

Οι κλάσεις ενεργοποίησης τοποθετούνται σε /core/triggers/ και ονομάστηκε έτσι interface_99_modMyModule_MyTriggers.class.php.

Υλοποιούν το DolibarrTriggers διεπαφή και α runTrigger() μέθοδος.

Παράδειγμα:

php

public function runTrigger($action, $object, $user, $langs, $conf) { if ($action == 'BILL_VALIDATE') { // Custom logic when invoice is validated } return 0; }

7.2 γάντζοι

Τα hooks εισάγουν λογικά στοιχεία ή στοιχεία διεπαφής σε υπάρχουσες σελίδες Dolibarr.

  • Άγκιστρα UI: Εισαγωγή κουμπιών, κειμένου ή HTML σε πρότυπα

  • Λογικά άγκιστρα: Επέκταση της λογικής δημιουργίας αντικειμένων, διαγραφής, επικύρωσης

Υλοποίηση μαθημάτων Hook HookInterface και να ανταποκριθούν σε τομείς όπως formObjectOptions, doActionsΚ.λπ.

Αρχικοποιούνται μέσω:

php

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

 

8. Διαχείριση πινάκων βάσης δεδομένων σε ενότητες

Οι περισσότερες ενότητες απαιτούν τη δική τους δομή δεδομένων. Το Dolibarr σάς επιτρέπει να ορίσετε και να διαχειριστείτε τη δική σας προσαρμοσμένοι πίνακες βάσης δεδομένων με καθαρό, συντηρήσιμο τρόπο.

8.1 Σενάρια εγκατάστασης και αναβάθμισης SQL

Ορίζετε το σχήμα σας χρησιμοποιώντας αρχεία SQL που τοποθετούνται σε /sql/.

Παράδειγμα: /sql/mymodule.sql

SQL

CREATE TABLE llx_mymodule_certification ( rowid INT AUTO_INCREMENT PRIMARY KEY, ref VARCHAR(50), label VARCHAR(255), status TINYINT DEFAULT 0, fk_user INT, date_creation DATETIME NOT NULL, tms TIMESTAMP ) ENGINE=InnoDB;

Το Dolibarr χρησιμοποιεί την περιγραφή της ενότητας για να εκτελέσει αυτά τα σενάρια κατά την εγκατάσταση.

8.2 Αντιστοίχιση Πινάκων με Αντικείμενο

Τα προσαρμοσμένα αντικείμενα ορίζονται ως κλάσεις PHP στο /class/, συνήθως εκτείνεται CommonObject.

Παράδειγμα: /class/certification.class.php

php

class Certification extends CommonObject { public $table_element = 'mymodule_certification'; public $element = 'certification'; public $fields = array( 'ref' => array('type' => 'string', 'required' => 1), 'label' => array('type' => 'string'), 'status' => array('type' => 'integer'), ); }

Αυτή η δομή επιτρέπει στο Dolibarr να δημιουργεί αυτόματα φόρμες, λίστες και αναλυτικές προβολές με ελάχιστη κωδικοποίηση.


9. Δημιουργία διεπαφών: Σελίδες, φόρμες, πρότυπα

Οι ενότητες συχνά περιλαμβάνουν προσαρμοσμένες σελίδες—είτε σελίδες διαχειριστή είτε επιχειρηματικές διεπαφές.

9.1 Αρχεία Σελίδας

Οι προσαρμοσμένες σελίδες τοποθετούνται σε /page/ και ακολουθήστε αυτήν τη δομή:

php

require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once '../class/certification.class.php'; llxHeader('', 'My Certifications'); print load_fiche_titre('Certifications Overview'); // Display UI print '<a class="butAction" href="create.php">New Certification</a>'; llxFooter();

9.2 Επεξεργασία Φόρμας

Χειρισμός εισόδου χρήστη χρησιμοποιώντας GETPOST() και checkToken():

php

if ($_POST['action'] == 'add' && checkToken()) { $ref = GETPOST('ref', 'alphanohtml'); $label = GETPOST('label', 'alpha'); $cert = new Certification($db); $cert->ref = $ref; $cert->label = $label; $cert->create($user); }

9.3 Πρότυπα (TPL)

Τα πρότυπα αποθηκεύονται σε /tpl/ και χρησιμοποιείται με include DOL_DOCUMENT_ROOT.'/custom/mymodule/tpl/mypage.tpl.php';.

Αυτό διαχωρίζει τη λογική από τη διάταξη και υποστηρίζει τη δομή HTML, τις κλάσεις και τις μεταφράσεις του Dolibarr.


10. Ενσωμάτωση με βασικές λειτουργίες (μενού, δικαιώματα, PDF)

Οι ενότητες μπορούν να ενσωματωθούν σε βάθος στο οικοσύστημα του Dolibarr.

10.1 Προσθήκη μενού

Ορίζεται στον περιγραφέα της ενότητας χρησιμοποιώντας $this->menu[] πίνακες. Κάθε μενού μπορεί να είναι ανώτατου επιπέδου, αριστερό μενού ή υπομενού.

php

$this->menu[] = array( 'fk_menu'=>'', 'type'=>'top', 'titre'=>'My Module', 'mainmenu'=>'mymodule', 'leftmenu'=>'', 'url'=>'/mymodule/page/index.php', 'langs'=>'mymodule@mymodule', 'position'=>100, 'enabled'=>'1', 'perms'=>'1' );

10.2 Δικαιώματα

Ορίστε στην περιγραφή της ενότητας:

php

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

Στη συνέχεια, η πρόσβαση επικυρώνεται με:

php

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

10.3 PDF και Ενότητες Αρίθμησης

Οι γεννήτριες PDF και οι μορφές αρίθμησης μπορούν να επεκταθούν τοποθετώντας προσαρμοσμένες κλάσεις σε /core/modules/.

  • Έγγραφα PDF: Επέκταση ModelePDFXXX

  • Μονάδες αρίθμησης: Επέκταση ModelNumXXX

Δηλώστε τα στην περιγραφή, ώστε να εμφανίζονται στον πίνακα ρυθμίσεων.


11. Βέλτιστες πρακτικές για προσαρμογή χωρίς βασική τροποποίηση

Για να διατηρήσετε το Dolibarr συντηρήσιμο:

  • ✅ Χρήση άγκιστρα αντί να τροποποιείτε πρότυπα

  • ✅ Χρήση πυροδοτεί αντί για επεξεργασία κλάσεων αντικειμένων

  • ✅ Τοποθετήστε την ενότητα σας μέσα /custom/ για να αποφύγετε την αντικατάσταση στις αναβαθμίσεις

  • ✅ Προσθήκη έλεγχος έκδοσης στην περιγραφή σας

  • ✅ Χρήση αρχεία γλώσσας για όλες τις συμβολοσειρές διεπαφής

  • ✅ Επικυρώστε όλες τις εισόδους και διαφύγετε από όλες τις εξόδους

  • ✅ Διατηρήστε την επιχειρηματική λογική σας class/, Δεν page/

Αυτές οι συνήθειες διασφαλίζουν τη συμβατότητα αναβαθμίσεων και τη μακροπρόθεσμη σταθερότητα.


12. Κοινά λάθη και πώς να τα αποφύγετε

❌ Επεξεργασία βασικών αρχείων

ΛύσηΧρησιμοποιήστε παρακάμψεις, άγκιστρα και επεκτάσεις.

❌ Χρήση Direct SQL αντί για κλάσεις αντικειμένων

Λύση: Χρήση fetch(), create(), update() μεθόδους στις κλάσεις αντικειμένων σας.

❌ Δεν γίνεται διαχείριση δικαιωμάτων

Λύση: Να ελέγχετε πάντα $user->rights->mymodule->action.

❌ Παράλειψη επικύρωσης εισόδου

Λύση: Να χρησιμοποιείτε πάντα GETPOST() και εισόδους SQL διαφυγής.

❌ Διαδρομές Σκληρού Κώδικα

Λύση: Χρήση DOL_URL_ROOT, dol_buildpath() και σταθερές.


13. Προηγμένα σενάρια προσαρμογής

13.1 Πολυεταιρική Υποστήριξη

Εάν χρησιμοποιείτε την ενότητα MultiCompany, βεβαιωθείτε ότι η ενότητά σας:

  • μπορείτε να χρησιμοποιήσετε entity πεδίο σε όλους τους προσαρμοσμένους πίνακες

  • Σέβη $conf->entity κατά την υποβολή ερωτημάτων σε δεδομένα

13.2 Προγραμματισμένες εργασίες με Cron Jobs

Προσθήκη εργασιών cron για εκτέλεση εργασιών παρασκηνίου:

php

$this->cronjobs[] = array( 'label'=>'Sync Certifications', 'jobtype'=>'method', 'class'=>'CertificationSync', 'method'=>'run', 'parameters'=>'', 'comment'=>'Runs nightly' );

13.3 Προσαρμοσμένα τελικά σημεία REST

Δημιουργήστε προσαρμοσμένα API τοποθετώντας σενάρια σε /custom/mymodule/script/api_*.php και την καταχώρισή τους στον περιγραφέα της ενότητας σας.


14. Διατήρηση συμβατότητας σε όλες τις εκδόσεις του Dolibarr

  • Δοκιμάστε την ενότητα σας με κάθε έκδοση του Dolibarr

  • Χρήση dol_version_compare() για να χειριστείτε τις διαφορές έκδοσης

  • Αποφύγετε τη χρήση παρωχημένων συναρτήσεων ή καθολικών μεταβλητών

  • Διατήρηση αρχείου καταγραφής αλλαγών (changelog.txt) και να διατηρείται η σημασιολογική εκδοχή


15. Σύναψη

Η κατανόηση της αρχιτεκτονικής των ενοτήτων Dolibarr είναι απαραίτητη για τη δημιουργία ισχυρές, αξιόπιστες και ασφαλείς για αναβάθμιση προσαρμογέςΕίτε δημιουργείτε εσωτερικά εργαλεία είτε εμπορικά πρόσθετα, η κατανόηση των ακόλουθων στοιχείων θα σας βοηθήσει:

  • Δομή ενότητας και αρχεία περιγραφής

  • Άγκιστρα, εναύσματα και δικαιώματα

  • Προσαρμοσμένες κλάσεις αντικειμένων και σχήμα βάσης δεδομένων

  • Πίνακες διαχείρισης και διεπαφές χρήστη

  • Ενσωμάτωση με δημιουργία PDF, εργασίες cron και API

Το Dolibarr σχεδιάστηκε για να επεκτείνεται. Όσο καλύτερα κατανοείτε την αρχιτεκτονική του, τόσο μεγαλύτερη αξία μπορείτε να προσφέρετε με τις προσαρμοσμένες ενότητες σας—χωρίς να αγγίξετε ποτέ τον βασικό κώδικα.


16. Πόροι και αναφορές για προγραμματιστές