Changes

m
Updating interlang links (links to translated versions of this page in other languages) triggered by origin English page "Module_development" update.
Line 1: Line 1:  +
<!-- BEGIN interlang links -->
 +
<!-- Do NOT edit this section
 +
    Links below are automatically managed by PolyglotBot
 +
    You can edit links on the English source page : Module_development -->
 +
[[en:Module_development]]
 +
[[fr:Développement_module]]
 +
[[es:Desarrollo_de_un_módulo]]
 +
[[zh:模块开发]]
 +
[[ja:モジュール_開発]]
 +
<!-- END interlang links -->
 +
 
[[Category:Core]]
 
[[Category:Core]]
 
{{TemplateDocDevDe}}
 
{{TemplateDocDevDe}}
Line 4: Line 15:  
Um ein neues Modul zu erstellen, gibt es mehrere Schritte. Dieses Tutorial soll beschreiben, wie Sie ein Modul hinzuzufügen können, um die Möglichkeiten von Dolibarr zu erweitern und eine oder mehreren  folgender Funktionen einzufügen:  
 
Um ein neues Modul zu erstellen, gibt es mehrere Schritte. Dieses Tutorial soll beschreiben, wie Sie ein Modul hinzuzufügen können, um die Möglichkeiten von Dolibarr zu erweitern und eine oder mehreren  folgender Funktionen einzufügen:  
   −
* Hinzufügen neuer Basistabellen
+
*Neue Tabellen in die Datenbank einfügen.
* Einfügen eigener Menüeinträge
+
*Einfügen Ihre eigenen Menüeinträge  
* Hinzufügen eigener Bildschirmmasken für die Eingabe/Ausgabe von neuen Tabellen
+
*Hinzufügen eigener Bildschirmmasken für die Eingabe/Ausgabe von neuen Tabellen
* Einfügen eines Karteireiter in Objektansichten bzw. Seiten (Rechnung, Produkte, Bestellung, Termine, ...)
+
*Registerkarten auf den Seiten für die Objektansicht und Bearbeitung (Rechnung, Produkt, Bestellung, Termine, ...)
* Einfügen eines Datenexport vordefiniert für die Exportfunktion
+
*Einfügen eines Datenexport vordefiniert für die Exportfunktion
* Ergänzen von neuen Boxen für die Startseite
+
*Neue Boxen/Widgets für die Startseite hinzufügen.
* Ajouter des variables de substitutions
+
*Substitutionsvariablen hinzufügen
* Definieren von neuen Berechtigungen
+
*Neue Berechtigungen festlegen
* Déclencher du code automatiquement sur une action Dolibarr particulière
+
*Triggercode bei einer bestimmten Dolibarr-Aktion auslösen
* Insérer votre code aux emplacement hooks de Dolibarr
+
*Eigenen Code an den Dolibarr-Hooks einhängen
* Einfügen von eigenen Nummerierungsmodulen
+
*Einfügen von eigenen Nummerierungsmodulen
* Hinzufügen einer Dokumentvorlage
+
*Hinzufügen einer Dokumentvorlage
* Hinzufügen eigener Themes
+
*Hinzufügen eigenes Designs/Themevorlage
 +
 
 
etc...
 
etc...
Toutes ces opérations ne sont possibles qu'avec la version 3.2 ou plus de Dolibarr.
     −
Les chapitres suivants vous présentent comment réaliser tout cela en manuel de manière simple. Pour les développeurs très expérimentés, une méthode par génération MDA est en cours de mise au point. Voir le dernier chapitre pour cela.
+
In den folgenden Kapiteln erfahren Sie, wie Sie all dies auf einfache Weise manuell umsetzen können.
 +
***
 +
 
 +
=[[File:Art.png]] Erstellen von Modulen mit dem Modulgenerator=
 +
 
 +
Seit Dolibarr 9.0 ist es möglich, die Hauptdateien Ihres Moduls mit dem "Modul-Generator" (auch "Module Builder" genannt) zu erstellen. Um ihn zu aktivieren:
 +
 
 +
*Aktivieren Sie das Modul "Modulgenerator" in der Sektion "Multi-Modul-Tools".
 +
 
 +
[[File:Mod_builder_2.png|400px]]
 +
 
 +
*Dann klicken Sie auf das "Bug"-Symbol, das in der Menüleiste oben rechts erschienen ist.
 +
 
 +
[[File:Mod_builder_3.png|400px]]
 +
 
 +
=[[File:Art.png]] Beispiel für eine Vorlage für ein externes Modul=
 +
Eine gute modèle/squelette für ein Dolibarr-Plugin gibt es hier:  [https://github.com/Dolibarr/dolibarr/tree/develop/htdocs/modulebuilder/template GitHub Dolibarr Module Modèle]
 +
 
 +
=[[File:Art.png]] Ein Modul erstellen=
 +
Die folgenden Unterkapitel beschreiben die Aktionen, die Sie durchführen müssen, um ein Dolibarr-Modul zu erstellen. Die ersten Kapitel sind unabhängig vom Zweck des Moduls obligatorisch, die folgenden hängen davon ab, was das Modul tun soll.
 +
 
 +
==Einen Moduldeskriptor erstellen (erforderlich)==
 +
'''Wann''': Obligatorisch, sobald eine Erweiterung entwickelt wird, unabhängig von ihrer Bestimmung.
 +
'''Seit Dolibarr 9.0 ist es möglich, den Deskriptor Ihres Moduls mit dem "Modulgenerator" zu erstellen'''. Dieses Tool befindet sich noch in der Entwicklungsphase und ist noch nicht ausgereift, kann aber bereits genutzt werden.
 +
 
 +
===Erstellen Sie Ihren Deskriptor mit dem Modulgenerator===
 +
 
 +
*Starten Sie den Modulgenerator, indem Sie auf das "bug"-Symbol klicken.
 +
 
 +
[[File:Mod_builder_3.png|400px]]
 +
 
 +
*Geben Sie den Namen Ihres Moduls ohne Leerzeichen ein (der Name Ihres Moduls DARF NICHT das Zeichen underscore oder Unterstrich : _) und klicken Sie auf Erstellen.
 +
 
 +
[[File:Mod_builder_4.png|400px]]
 +
 
 +
*Ein Modul mit seinen ersten Dateien wurde initialisiert. Sie können nun die Einstellungen des Moduldeskriptors ändern:
 +
 
 +
[[File:Mod_builder_5.png|400px]]
 +
 
 +
===Alternative: Erstellen Sie Ihren Deskriptor manuell (ohne den Modulgenerator zu verwenden)===
 +
Der erste Schritt besteht also darin, eine Datei mit der Modulbeschreibung (Deskriptor) zu erstellen. Zu diesem Zweck:
 +
 
 +
*Erstellen Sie das Verzeichnis '''/htdocs/'''meinmodul'''/core/modules'''. Wechseln Sie dann in das Verzeichnis '''dev/skeletons''' und kopieren Sie die Datei modMyModule.class.php in dieses Verzeichnis '''htdocs/'''monmodule''''/core/modules'''.
 +
*Benennen Sie die Datei mod'''MyModule'''.class.php um, indem Sie nur den Teil '''MyModule''' ändern (die Datei muss mit mod beginnen).
 +
 
 +
Ändern Sie anschließend den Inhalt dieser Datei, um :
 +
 
 +
*den ''modMyModule'' in einen Wert, der dem Zweck Ihres Moduls entspricht. Dieser Wert sollte immer mit '<nowiki/>'''mod'''' beginnen und nur '''alphabetische Zeichen''' enthalten.
 +
*$this->numero = ''100000'' durch eine freie Modulnummer. Um Konflikte zu vermeiden, können Sie auf folgender Seite nach bereits zugeteilten Nummern suchen: [[List of modules id|Liste der Modul-IDs]].
 +
*Ändern Sie eventuell andere Variablen, die im Konstruktor definiert sind (Was sie bedeuten, finden Sie im Kommentar im Skelett-Code).
 +
 
 +
Der Deskriptor Ihres Moduls ist nun an seinem Platz.
 +
 
 +
***
 +
 
 +
=[[File:Art.png]] Beispielvorlage für ein Modul/Pluginodule=
 +
 
 +
Ein gutes Vorlagen-Gerüst (Template) für ein Modul finden sie hier: [https://github.com/Dolibarr/dolibarr/tree/develop/htdocs/modulebuilder/template GitHub Dolibarr Modul-Template]
    +
=[[File:Art.png]] Erstellen eines Moduls=
 +
In den folgenden Unterkapiteln werden die Aktionen beschrieben, welche zum Erstellen eines Dolibarr-Moduls ausgeführt werden müssen. Die ersten Kapitel sind, unabhängig vom Zweck des Moduls, zwingend erforderlich. Die folgenden Kapitel hängen von der Funktion des Moduls ab.
   −
= [[File:Art.png]] Exemple de modèle de module externe=
+
==Erstellen eines Moduldeskriptors (erforderlich)==
 +
'''Wann''': Immer notwendig wenn eine Erweiterung entwickelt wird, unabhängig von ihrem Zweck (Ausnahmen sind das Hinzufügen eines Themas oder einer Dokumentvorlage).
   −
Un bon modéle/squelette de module externe Dolibarr est disponible ici : [https://github.com/rdoursenaud/dolibarr-module-template GitHub Dolibarr Module Modèle]
+
'''Seit Dolibarr 9.0 sollten Sie das als Standardmodul bereitgestellte ModuleBuilder-Modul verwenden, um den Moduldeskriptor zu generieren.'''
   −
= [[File:Art.png]] Créer un module =
+
===Erstellen des Deskriptors===
Les sous chapitres suivant décrivent les actions à faire pour créer un module Dolibarr. Les premiers chapitres sont obligatoires quelle que soit la vocation du module, les suivants dépendront de ce que doit faire le module.
+
Der erste Schritt besteht darin, eine Modulbeschreibungsdatei (Deskriptor) zu erstellen. Dafür gehen Sie wie folgt vor.
   −
== Créer un descripteur de Module (obligatoire) ==
+
'''Die durchgestrichenen Teile der Anleitung sind nicht mehr aktuell und bedürfen einer grundlegenden Überarbeitung. !!!Verwenden Sie das ModuleBuilder-Modul!!!'''
'''Quand''': Obligatoire dès qu'une extension est développée, quelle que soit sa vocation (sauf pour l'ajout de thème ou de modèle de document).
     −
=== Créer votre descripteur ===
+
*<s>Créer le répertoire '''/htdocs/''monmodule''/core/modules'''. Puis, aller dans le répertoire '''dev/skeletons''' et recopier le fichier modMyModule.class.php dans ce répertoire '''htdocs/''monmodule''/core/modules'''.</s>
La première étape est donc de créer un fichier de description du module (descripteur). Pour cela:
+
*<s>Renommez le fichier mod'''MyModule'''.class.php en modifiant seulement la partie '''MyModule''' (le fichier doit commencer par mod)</s>
* Créer le répertoire '''/htdocs/''monmodule''/core/modules'''. Puis, aller dans le répertoire '''dev/skeletons''' et recopier le fichier modMyModule.class.php dans ce répertoire '''htdocs/''monmodule''/core/modules'''.
  −
* Renommez le fichier mod'''MyModule'''.class.php en modifiant seulement la partie '''MyModule''' (le fichier doit commencer par mod)
  −
Ensuite, modifier le contenu de ce fichier afin de remplacer:
  −
* les ''modMyModule'' en une valeur qui corresponde à la vocation de votre module. Cette valeur doit toujours commencer par ''''mod'''' et ne contenir que des '''caractères alphabétiques'''.
  −
* $this->numero = ''100000'' par un numéro de module libre. Pour éviter tout conflit, vous pouvez consulter la page suivante pour retrouver les numéros déjà alloués: [[List of modules id|Liste des id de modules]].
  −
* Modifier éventuellement les autres variables définies dans le constructeurs (Voir le commentaire dans le code du squelette pour leur signification).
     −
Le descripteur de votre module est alors en place.
+
<s>Ensuite, modifier le contenu de ce fichier afin de remplacer:</s>
   −
=== Tester votre descripteur ===
+
*<s>les ''modMyModule'' en une valeur qui corresponde à la vocation de votre module. Cette valeur doit toujours commencer par '</s><nowiki/><s>'''mod'''' et ne contenir que des '''caractères alphabétiques'''.</s>
 +
*<s>$this->numero = ''100000'' par un numéro de module libre. Pour éviter tout conflit, vous pouvez consulter la page suivante pour retrouver les numéros déjà alloués: [[List of modules id|Liste des id de modules]].</s>
 +
*<s>Modifier éventuellement les autres variables définies dans le constructeurs (Voir le commentaire dans le code du squelette pour leur signification).</s>
   −
Lancer Dolibarr et aller sur la page '''Configuration->module''', vous devez voir apparaître une nouvelle ligne avec votre nouveau module et la possibilité de l'activer ou non (parcourez tous les onglets de chaque catégories de modules jusqu'à le retrouver).
+
<s>Le descripteur de votre module est alors en place.</s>
C'est la valeur de $this->special qui détermine dans quel onglet se trouve votre module.
     −
== Arborescence d'un nouveau module ==
+
===<s>Tester votre descripteur</s>===
 +
 
 +
<s>Lancer Dolibarr et aller sur la page '''Configuration->module''', vous devez voir apparaître une nouvelle ligne avec votre nouveau module et la possibilité de l'activer ou non (parcourez tous les onglets de chaque catégories de modules jusqu'à le retrouver).
 +
C'est la valeur de $this->special qui détermine dans quel onglet se trouve votre module.</s>
 +
 
 +
==Arborescence d'un nouveau module==
 
Voici l'arborescence à respecter pour l'organisation des fichiers d'un module.
 
Voici l'arborescence à respecter pour l'organisation des fichiers d'un module.
   Line 57: Line 127:  
Un modèle de module a été crée par un contributeur Dolibarr, il est accessible ici : [https://github.com/rdoursenaud/dolibarr-module-template]
 
Un modèle de module a été crée par un contributeur Dolibarr, il est accessible ici : [https://github.com/rdoursenaud/dolibarr-module-template]
   −
== Créer vos tables SQL et les classes PHP DAO (optionnel) ==
+
==Erstellen von SQL-Tabellen und einer PHP-DAO-Klasse (optional)==
'''Quand''': Si votre module a besoin de gérer des données qui lui sont propres
+
'''Wann''': Wenn Ihr Modul eigene Daten verwalten muss.
   −
=== Créer vos fichiers .sql ===
+
===Erstellen der .sql Datei===
Si votre module a vocation à gérer des données bien à lui, qui n'existent pas en base dans la version standard de Dolibarr, il est nécessaire de définir des tables SQL pour stocker ces données.
+
Wenn Ihr Modul für die Verwaltung von Daten ausgelegt ist, welche in der Standardversion von Dolibarr nicht verfügbar sind, müssen Sie SQL-Tabellen zum Speichern der Daten definieren.
   −
Créer un sous-répertoire '''sql''' dans le répertoire de votre module (par exemple '''htdocs/monmodule/sql''') afin d'y placer les scripts sql que vous allez créer.
+
Skripte zum Erstellen von Tabellen und zum Laden von Daten, durch Ihr Modul, werden in einem Unterverzeichnis Namens "'''/ ''meinModul'' / sql'''" gespeichert. Gegebenenfalls muss der Unterordner noch erstellt werden.
   −
Ensuite, vérifiez dans votre fichier descripteur de module, dans la fonction '''init''' que la ligne
+
Danach öffnen Sie die Deskriptordatei und prüfen in der Funktion '''init''', das die folgende Zeile '''nicht''' kommentiert ist.
   −
<source lang="php">$this->_load_tables('/mymodule/sql/');</source>
+
<syntaxhighlight lang="php">$this->_load_tables('/mymodule/sql/');</syntaxhighlight>
   −
n'est pas commentée.
+
''Befolgen Sie folgende Regeln:''
   −
''Règles à respecter:''
+
*Fügen Sie die Dateien zum Erstellen von Tabellenbefehlen nach dem Prinzip der Datei '''llx_mymodule_myobject.sql''' für jede Tabelle separat hinzu. Fügen Sie noch gegenenfalls eine Datei nach dem Muster der Datei '''llx_mymodule_myobject.key.sql''' hinzu. (Beispiele finden Sie in den vorhandenen Dateinen in  '''htdocs / modulebuilder / template / sql /''' ).
* Ajouter les fichiers d'ordre de création de vos tables sur le principe d'un fichier '''llx_matable.sql''' par table accompagné éventuellement du fichier '''llx_matable.key.sql''' (voir les fichiers existants dans '''install/mysql/tables''' pour exemple).
+
*Die empfohlenen Typen und Namen von SQL-Feldern werden auf folgender Seite definiert: [[Language_and_development_rules#Table_and_fields_structures]].
* Pour ce qui est des commandes pour ajouter/manipuler des données, elles doivent toutes se trouver dans un fichier nommé '''data.sql''' situé dans le même répertoire '''/monmodule/sql/'''.
+
*Um Daten zu verwalten, müssen Sie eine Datei mit dem Namen '''data.sql''' im Verzeichnis '''/ ''meinModul'' / sql /''' erstellen, die den SQL-Befehl zum Hinzufügen / Bearbeiten und Löschen von Daten enthält.
Exemple de contenu de fichier data.sql
+
*Verwenden Sie doppelte Anführungszeichen nicht für Zeichenfolgen (z.B. 'Text', nicht "Text"), da doppelte Anführungszeichen in PostGreQSL eine bestimmte Bedeutung haben.
<source lang="sql">
+
 
 +
Beispiel für den Inhalt der Datei '''data.sql'''
 +
<syntaxhighlight lang="sql">
 
  delete from llx_const where name='MONMODULE_IT_WORKS' and entity='__ENTITY__';
 
  delete from llx_const where name='MONMODULE_IT_WORKS' and entity='__ENTITY__';
 
  insert into llx_const (name, value, type, note, visible, entity) values ('MONMODULE_IT_WORKS','1','chaine','A constant for my module',1,'__ENTITY__');
 
  insert into llx_const (name, value, type, note, visible, entity) values ('MONMODULE_IT_WORKS','1','chaine','A constant for my module',1,'__ENTITY__');
</source>
+
</syntaxhighlight>
 +
 
 +
Dateien müssen für eine MySQL-Datenbank konzipiert sein.
   −
Les ordres SQL des fichiers doivent être opérationnels pour la base de données '''mysql'''.
+
Hinweis: Die Dateien anderer Datenbanken werden nicht gewartet. Sie werden vom Treiber der anderen Datenbank im laufenden Betrieb gelesen und konvertiert.  
Rem: Les fichiers des autres bases ne sont pas à maintenir. Ils sont lus et convertit à la volée par le driver de la base de données.
     −
=== Tester vos fichier .sql ===
+
===Test Ihrer .sql-Dateien===
   −
Une fois les fichiers prêts, vous pouvez retourner sous Dolibarr puis désactiver le module, dropper les tables en base et réactiver le module.
+
Sobald Sie die Dateien erstellt haben, können Sie zu Dolibarr zurückkehren, um das Modul zu deaktivieren. Danach löschen Sie die Tabellen aus der Datenbank und aktivieren das Modul erneut. Die Tabellen sollten durch die Aktivierung des Moduls neu erstellt werden. Ist dies nicht der Fall, dann überprüfen Sie Ihrer Skripte oder überprüfen Sie die Dolibarr-Protokolle.
Les tables doivent alors être recréées par l'activation du module.
  −
Si tel n'est pas le cas, vérifiez vos scripts en les passant à la main, ou consultez les logs Dolibarr.
     −
=== Générer la classe PHP DAO d'accès aux tables ===
+
===Générer la classe PHP DAO d'accès aux tables===
    
Une fois votre ou vos tables créées en base, aller dans le répertoire '''dev/skeletons''', copiez le fichier '''build_class_from_table.php''' dans le répertoire sql/ de votre module, et lancez le script
 
Une fois votre ou vos tables créées en base, aller dans le répertoire '''dev/skeletons''', copiez le fichier '''build_class_from_table.php''' dans le répertoire sql/ de votre module, et lancez le script
<source lang="bash">php build_class_from_table.php nomtable</source>
+
<syntaxhighlight lang="bash">php build_class_from_table.php nomtable</syntaxhighlight>
 
Remarque: Si la commande ne fonctionne pas, essayer d'utiliser php-cli plutot que php.
 
Remarque: Si la commande ne fonctionne pas, essayer d'utiliser php-cli plutot que php.
   Line 101: Line 172:  
Un fichier '''out.nomtable_script.php''' a également été généré et contient un exemple de code pour utiliser la classe pour chacune des 4 méthodes CRUD.
 
Un fichier '''out.nomtable_script.php''' a également été généré et contient un exemple de code pour utiliser la classe pour chacune des 4 méthodes CRUD.
   −
== Affichage des onglets (optionnel) ==
+
==Affichage des onglets (optionnel)==
   −
=== Ajouter ou supprimer des onglets sur les fiches objets ===
+
===Ajouter ou supprimer des onglets sur les fiches objets===
 
'''Quand''' : Pour ajouter votre propre onglet parmi les onglets standard d'une fiche entité (facture, commande, proposition commercial, adhérent...)
 
'''Quand''' : Pour ajouter votre propre onglet parmi les onglets standard d'une fiche entité (facture, commande, proposition commercial, adhérent...)
    
Pour cela, aller dans le fichier descripteur de module précédemment créé et modifier le tableau $this->tabs:
 
Pour cela, aller dans le fichier descripteur de module précédemment créé et modifier le tableau $this->tabs:
<source lang="php">
+
<syntaxhighlight lang="php">
 
// Array to add new pages in new tabs or remove existing one
 
// Array to add new pages in new tabs or remove existing one
 
$this->tabs = array('objecttype:+tabname1:Title1:mylangfile@monmodule:$user->rights->monmodule->read:/monmodule/mapagetab1.php?id=__ID__'    // To add a new tab identified by code tabname1
 
$this->tabs = array('objecttype:+tabname1:Title1:mylangfile@monmodule:$user->rights->monmodule->read:/monmodule/mapagetab1.php?id=__ID__'    // To add a new tab identified by code tabname1
 
                             'objecttype:+tabname2:Title2:mylangfile@monmodule:$user->rights->monmodule->read:/monmodule/mapagetab2.php?id=__ID__',  // To add a new tab identified by code tabname2
 
                             'objecttype:+tabname2:Title2:mylangfile@monmodule:$user->rights->monmodule->read:/monmodule/mapagetab2.php?id=__ID__',  // To add a new tab identified by code tabname2
 
                             'objecttype:-tabname');                                                    // To remove an existing tab identified by code tabname
 
                             'objecttype:-tabname');                                                    // To remove an existing tab identified by code tabname
</source>
+
</syntaxhighlight>
    
Le tableau doit contenir une liste de chaîne, chaque chaîne représentant un nouvel onglet.
 
Le tableau doit contenir une liste de chaîne, chaque chaîne représentant un nouvel onglet.
 
Le format de la chaîne étant composé de 6 parties séparées par ":"
 
Le format de la chaîne étant composé de 6 parties séparées par ":"
* Partie 1: Le type d'élément (objecttype) dans lequel doit apparaître l'onglet qui est une valeur parmi celle-ci:
+
 
 +
*Partie 1: Le type d'élément (objecttype) dans lequel doit apparaître l'onglet qui est une valeur parmi celle-ci:
 
{{TemplateModuleTabs-de}}
 
{{TemplateModuleTabs-de}}
* Partie 2: Nom de code pour l'onglet à ajouter (commence par +) ou à enlever (commence par -)
+
 
* Partie 3: Le titre de l'onglet. Cela peut être un libellé en dur ou mieux un code traduction présent dans un fichier lang.
+
*Partie 2: Nom de code pour l'onglet à ajouter (commence par +) ou à enlever (commence par -)
* Partie 4: Le nom du fichier .lang (sans l'extension .lang) qui contient la correspondance entre le code traduction et le libellé à afficher. Si ce com est suivi de @monmodule, Dolibarr cherche le fichier dans le répertoire lang propre au module, c'est à dire htdocs/monmodule/langs/code_CODE/monmodule.lang, sinon Dolibarr cherche le fichier traduction dans htdocs/langs/code_CODE/mylangfile.lang
+
*Partie 3: Le titre de l'onglet. Cela peut être un libellé en dur ou mieux un code traduction présent dans un fichier lang.
* Partie 5: Une condition à tester pour savoir si l'onglet doit être visible ou pas. Mettre '1' pour qu'il soit toujours visible.
+
*Partie 4: Le nom du fichier .lang (sans l'extension .lang) qui contient la correspondance entre le code traduction et le libellé à afficher. Si ce com est suivi de @monmodule, Dolibarr cherche le fichier dans le répertoire lang propre au module, c'est à dire htdocs/monmodule/langs/code_CODE/monmodule.lang, sinon Dolibarr cherche le fichier traduction dans htdocs/langs/code_CODE/mylangfile.lang
* Partie 6: L'url de la page à afficher quand on clique sur l'onglet. La chaine __ID__ sera remplacée automatiquement par l'Id de l'entité concernée.
+
*Partie 5: Une condition à tester pour savoir si l'onglet doit être visible ou pas. Mettre '1' pour qu'il soit toujours visible.
 +
*Partie 6: L'url de la page à afficher quand on clique sur l'onglet. La chaine __ID__ sera remplacée automatiquement par l'Id de l'entité concernée.
    
Pour que la déclaration soit effective, il faut désactiver et réactiver le module.
 
Pour que la déclaration soit effective, il faut désactiver et réactiver le module.
Line 128: Line 201:  
Pour alimenter le contenu de l'onglet avec des données issues de la base, voir le chapitre suivant.
 
Pour alimenter le contenu de l'onglet avec des données issues de la base, voir le chapitre suivant.
   −
=== Ajouter les onglets standard d'un objet sur sa propre page ===
+
===Ajouter les onglets standard d'un objet sur sa propre page===
 
'''Quand''' : Pour afficher les onglets standard d'une fiche entité (produit, tiers, etc.) sur votre propre page onglet d'une entité.
 
'''Quand''' : Pour afficher les onglets standard d'une fiche entité (produit, tiers, etc.) sur votre propre page onglet d'une entité.
   Line 136: Line 209:     
Pour chaque fiche entité, il y a deux fichiers à inclure avec l'instruction
 
Pour chaque fiche entité, il y a deux fichiers à inclure avec l'instruction
<source lang="php">require_once($url_fichier) ;</source>
+
<syntaxhighlight lang="php">require_once($url_fichier) ;</syntaxhighlight>
    
Voici quelques examples de fichiers à inclure (DOL_DOCUMENT_ROOT correspond au dossier dolibarr/htdocs/) :
 
Voici quelques examples de fichiers à inclure (DOL_DOCUMENT_ROOT correspond au dossier dolibarr/htdocs/) :
* Entité tiers (thirdparty) :
+
 
** DOL_DOCUMENT_ROOT/societe/class/societe.class.php
+
*Entité tiers (thirdparty) :
** DOL_DOCUMENT_ROOT/core/lib/company.lib.php
+
**DOL_DOCUMENT_ROOT/societe/class/societe.class.php
* Entité produit (product) :
+
**DOL_DOCUMENT_ROOT/core/lib/company.lib.php
** DOL_DOCUMENT_ROOT/product/class/product.class.php
+
*Entité produit (product) :
** DOL_DOCUMENT_ROOT/core/lib/product.lib.php
+
**DOL_DOCUMENT_ROOT/product/class/product.class.php
* Entité facture (invoice) :
+
**DOL_DOCUMENT_ROOT/core/lib/product.lib.php
** DOL_DOCUMENT_ROOT/compta/facture/facture.class.php
+
*Entité facture (invoice) :
** DOL_DOCUMENT_ROOT/core/lib/invoice.lib.php
+
**DOL_DOCUMENT_ROOT/compta/facture/facture.class.php
 +
**DOL_DOCUMENT_ROOT/core/lib/invoice.lib.php
    
'''2. Créer et charger l'objet à afficher dans votre onglet'''
 
'''2. Créer et charger l'objet à afficher dans votre onglet'''
Line 154: Line 228:     
''Exemple :''
 
''Exemple :''
<source lang="php">
+
<syntaxhighlight lang="php">
 
$id=GETPOST('id','int');
 
$id=GETPOST('id','int');
 
$ref=GETPOST('ref','alpha');
 
$ref=GETPOST('ref','alpha');
 
$product = new Product($db) ;
 
$product = new Product($db) ;
 
$result = $product->fetch($id, $ref) ; //Tester $result pour vérifier que l'accès à la base s'est bien passée
 
$result = $product->fetch($id, $ref) ; //Tester $result pour vérifier que l'accès à la base s'est bien passée
</source>
+
</syntaxhighlight>
    
'''3. Récupérer la liste des onglets correspondants à l'entité choisie'''
 
'''3. Récupérer la liste des onglets correspondants à l'entité choisie'''
Line 166: Line 240:     
Le tableau retourné est composé de la façon suivante :
 
Le tableau retourné est composé de la façon suivante :
<source lang="php">
+
<syntaxhighlight lang="php">
 
$head        // Tableau des onglets
 
$head        // Tableau des onglets
 
$head[$h]    // Élément décrivant un onglet. Il y aura autant de $h que d'onglets à afficher
 
$head[$h]    // Élément décrivant un onglet. Il y aura autant de $h que d'onglets à afficher
Line 172: Line 246:  
$head[$h][1] // Titre de l’onglet
 
$head[$h][1] // Titre de l’onglet
 
$head[$h][2] // Code de l'onglet, à utiliser pour choisir quel onglet sera 'actif' (voir paragraphe suivant)
 
$head[$h][2] // Code de l'onglet, à utiliser pour choisir quel onglet sera 'actif' (voir paragraphe suivant)
</source>
+
</syntaxhighlight>
    
''Exemple :''
 
''Exemple :''
<source lang="php">
+
<syntaxhighlight lang="php">
 
$head = product_prepare_head($product, $user) ; //le paramètre $user n'est pas présent sur certaines fonctions
 
$head = product_prepare_head($product, $user) ; //le paramètre $user n'est pas présent sur certaines fonctions
</source>
+
</syntaxhighlight>
    
'''4. Afficher les onglets sur votre page onglet'''
 
'''4. Afficher les onglets sur votre page onglet'''
Line 183: Line 257:  
Utiliser la fonction dol_fiche_head() qui affiche les onglets contenus dans le tableau $head retourné par XX_prepare_head().
 
Utiliser la fonction dol_fiche_head() qui affiche les onglets contenus dans le tableau $head retourné par XX_prepare_head().
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
dol_fiche_head($links, $active='0', $title='', $notab=0, $picto='')
 
dol_fiche_head($links, $active='0', $title='', $notab=0, $picto='')
 
//$links  // Tableau des onglets, appelé $head plus haut.
 
//$links  // Tableau des onglets, appelé $head plus haut.
Line 193: Line 267:  
//            service
 
//            service
 
//            company
 
//            company
</source>
+
</syntaxhighlight>
    
Cette fonction affiche les onglets voulus et ouvre un élément ''< div class="" >'' qui correspond à la zone bleue sous les onglets (si paramètre $notab = 0). Pour fermer la zone bleue, il suffit de fermer l'élément ''< /div >'' dans le code PHP.
 
Cette fonction affiche les onglets voulus et ouvre un élément ''< div class="" >'' qui correspond à la zone bleue sous les onglets (si paramètre $notab = 0). Pour fermer la zone bleue, il suffit de fermer l'élément ''< /div >'' dans le code PHP.
Line 200: Line 274:  
Pour plus de détail, se référer à la [http://www.dolibarr.fr/doxygen/ documentation Doxygen] ou directement au code de Dolibarr.
 
Pour plus de détail, se référer à la [http://www.dolibarr.fr/doxygen/ documentation Doxygen] ou directement au code de Dolibarr.
   −
== Créer vos pages écran PHP (optionnel) ==
+
==Créer vos pages écran PHP (optionnel)==
 
'''Quand''': Si l'objet de votre module est d'ajouter des fonctionnalités qui nécessitent de nouveaux écrans.
 
'''Quand''': Si l'objet de votre module est d'ajouter des fonctionnalités qui nécessitent de nouveaux écrans.
   −
=== Créer une page écran PHP brute ===
+
===Créer une page écran PHP brute===
 
Vous pouvez ensuite créer vos pages PHP, qui se basent sur les données de vos tables, en utilisant les squelettes fournis comme exemple dans le répertoire '''dev/skeletons''' (Pour le développement d'un script en ligne de commande, voir [[Développement de scripts]]).
 
Vous pouvez ensuite créer vos pages PHP, qui se basent sur les données de vos tables, en utilisant les squelettes fournis comme exemple dans le répertoire '''dev/skeletons''' (Pour le développement d'un script en ligne de commande, voir [[Développement de scripts]]).
   Line 210: Line 284:  
Y recopier le fichier '''skeleton_page.php''' qui va servir de point de départ.
 
Y recopier le fichier '''skeleton_page.php''' qui va servir de point de départ.
 
Modifier le fichier afin que le main.inc.php soit trouvés
 
Modifier le fichier afin que le main.inc.php soit trouvés
<source lang="php">
+
<syntaxhighlight lang="php">
 +
// Load Dolibarr environment
 
$res=0;
 
$res=0;
if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php"); // to work if your module directory is into dolibarr root htdocs directory
+
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php"); // to work if your module directory is into a subdir of root htdocs directory
+
if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
 +
// Try main.inc.php into web root detected using web root caluclated from SCRIPT_FILENAME
 +
$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
 +
while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
 +
if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
 +
if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
 +
// Try main.inc.php using relative path
 +
if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
 +
if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
 +
if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
 
if (! $res) die("Include of main fails");
 
if (! $res) die("Include of main fails");
</source>
+
</syntaxhighlight>
 
Notez qu'il est possible que vous deviez ajouter plus de "../" dans les chemin, en fonction de la profondeur de vos fichiers par rapport au répertoire de votre module.
 
Notez qu'il est possible que vous deviez ajouter plus de "../" dans les chemin, en fonction de la profondeur de vos fichiers par rapport au répertoire de votre module.
   Line 222: Line 306:  
C'est dans le main qu'est chargé l'environnement technique ainsi que les habilitations. Les variables objets suivantes sont alors positionnées:
 
C'est dans le main qu'est chargé l'environnement technique ainsi que les habilitations. Les variables objets suivantes sont alors positionnées:
   −
* $user    L'objet qui contient les caractéristiques de l'utilisateur + ses droits.
+
*$user    L'objet qui contient les caractéristiques de l'utilisateur + ses droits.
* $conf    L'objet qui contient la configuration de Dolibarr.
+
*$conf    L'objet qui contient la configuration de Dolibarr.
* $db      L'objet qui contient le handler de connexion ouvert à la base de données.
+
*$db      L'objet qui contient le handler de connexion ouvert à la base de données.
* $langs  L'objet qui contient la langue de l'utilisateur.
+
*$langs  L'objet qui contient la langue de l'utilisateur.
 +
 
 +
*L'inclusion d'une classe ou librairie dédiée au module, sans savoir d'où le fichier sera appelé, se fait en utilisant une fonction de Dolibarr (et non en utilisant directement le include_once)
   −
* L'inclusion d'une classe ou librairie dédiée au module, sans savoir d'où le fichier sera appelé, se fait en utilisant une fonction de Dolibarr (et non en utilisant directement le include_once)
   
''Exemple :''
 
''Exemple :''
<source lang="php">
+
<syntaxhighlight lang="php">
 
dol_include_once('/monmodule/class/maclasse.class.php', 'MaClasse');
 
dol_include_once('/monmodule/class/maclasse.class.php', 'MaClasse');
</source>
+
</syntaxhighlight>
 +
 
 +
*L'appel des classes fournies en standard avec Dolibarr se fera par contre par le require_once directe avec la syntaxe suivante:
   −
* L'appel des classes fournies en standard avec Dolibarr se fera par contre par le require_once directe avec la syntaxe suivante:
   
''Exemple :''
 
''Exemple :''
<source lang="php">
+
<syntaxhighlight lang="php">
 
require_once DOL_DOCUMENT_ROOT.'/core/class/doli.class.php';
 
require_once DOL_DOCUMENT_ROOT.'/core/class/doli.class.php';
</source>
+
</syntaxhighlight>
 
La raison est que si le dol_include_once est pratique car il scanne chaque répertoire de chemin alternatifs pour trouver le fichier, il est aussi moins performant car génère des accès et recherches disque à chaque appel (en effet, PHP intègre un cache des fichiers lus mais n'intègre pas un cache des fichiers "non trouvés". Et comme un fichier donné n'est que dans une seule arborescence, il y a toujours une arborescence alternative où il ne se trouve pas et qui génère des accès superflus au disque dur, pénalisant en terme de performance. Comme pour les fichiers internes à Dolibarr, on connait toujours le chemin exacte, le require_once avec ce chemin direct doit être préféré).
 
La raison est que si le dol_include_once est pratique car il scanne chaque répertoire de chemin alternatifs pour trouver le fichier, il est aussi moins performant car génère des accès et recherches disque à chaque appel (en effet, PHP intègre un cache des fichiers lus mais n'intègre pas un cache des fichiers "non trouvés". Et comme un fichier donné n'est que dans une seule arborescence, il y a toujours une arborescence alternative où il ne se trouve pas et qui génère des accès superflus au disque dur, pénalisant en terme de performance. Comme pour les fichiers internes à Dolibarr, on connait toujours le chemin exacte, le require_once avec ce chemin direct doit être préféré).
   −
=== Remplacer les parties d'écrans templatés (version 3.3+) ===
+
===Accès à la base===
Certaines portion d'écran de Dolibarr sont isolés dans des fichiers templates.
  −
Vous pouvez développer un module pour remplacer un ou plusieurs de ces templates par les vôtres.
  −
{{ToComplete}}
  −
 
  −
=== Accès à la base ===
   
Si vous avez besoin de réaliser des modifications en base dans votre propre table ajoutée, utilisez la classe générée plus haut qui contient les méthodes pour cela.
 
Si vous avez besoin de réaliser des modifications en base dans votre propre table ajoutée, utilisez la classe générée plus haut qui contient les méthodes pour cela.
   Line 252: Line 333:  
Pour un insert, update ou delete:
 
Pour un insert, update ou delete:
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
$db->begin();  // Debut transaction
 
$db->begin();  // Debut transaction
 
$db->query("Ma requete insert, update ou delete");
 
$db->query("Ma requete insert, update ou delete");
 
$db->commit();      // Valide
 
$db->commit();      // Valide
 
ou $db->rollback()  // Annule
 
ou $db->rollback()  // Annule
</source>
+
</syntaxhighlight>
    
Pour une lecture:
 
Pour une lecture:
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
$resql=$db->query("Ma requete select");
 
$resql=$db->query("Ma requete select");
 
if ($resql)
 
if ($resql)
Line 282: Line 363:  
}
 
}
 
}
 
}
</source>
+
</syntaxhighlight>
   −
=== Définition du style ===
+
===Définition du style===
 
Pour que le look de la page soit aligné avec le thème Dolibarr, il est nécessaire d'utiliser les styles des CSS de Dolibarr.
 
Pour que le look de la page soit aligné avec le thème Dolibarr, il est nécessaire d'utiliser les styles des CSS de Dolibarr.
    
Par exemple:
 
Par exemple:
   −
* class="'''liste_titre'''" sur les balises ''tr'' et ''td'' pour une ligne de titre de tableau.
+
*class="'''liste_titre'''" sur les balises ''tr'' et ''td'' pour une ligne de titre de tableau.
* class="'''pair'''" ou class="'''impair'''" sur les balises ''tr'' et ''td'' des lignes de données de tableau.
+
*class="'''pair'''" ou class="'''impair'''" sur les balises ''tr'' et ''td'' des lignes de données de tableau.
* class="'''flat'''" sur tous les champs de saisie (''input, select, textarea''...).
+
*class="'''flat'''" sur tous les champs de saisie (''input, select, textarea''...).
* class="'''button'''" sur les objets de type ''input type="submit"''.
+
*class="'''button'''" sur les objets de type ''input type="submit"''.
      −
=== Utiliser le sélecteur de date de Dolibarr ===
+
===Utiliser le sélecteur de date de Dolibarr===
 
Si vous le désirez, vous pouvez profiter du sélecteur de date dans des écrans Dolibarr. Pour cela, utilisez la ligne suivante:
 
Si vous le désirez, vous pouvez profiter du sélecteur de date dans des écrans Dolibarr. Pour cela, utilisez la ligne suivante:
<source lang="php">
+
<syntaxhighlight lang="php">
 
$form=new Form($db);
 
$form=new Form($db);
 
$form->select_date('','mykey',0,0,0,"myform");
 
$form->select_date('','mykey',0,0,0,"myform");
</source>
+
</syntaxhighlight>
 
La chaine mykey identifie la zone date. Il faut y mettre une valeur différente s'il y a plusieurs zones.
 
La chaine mykey identifie la zone date. Il faut y mettre une valeur différente s'il y a plusieurs zones.
 
La chaine myform est le nom de la zone FORM (dans form name="myform" de la page HTML).
 
La chaine myform est le nom de la zone FORM (dans form name="myform" de la page HTML).
Line 306: Line 387:     
Pour récupérer la valeur, à l'issu du POST, la commande est:
 
Pour récupérer la valeur, à l'issu du POST, la commande est:
<source lang="php">
+
<syntaxhighlight lang="php">
 
$mydate = dol_mktime(12, 0 , 0, $_POST['mykeymonth'], $_POST['mykeyday'], $_POST['mykeyyear']);
 
$mydate = dol_mktime(12, 0 , 0, $_POST['mykeymonth'], $_POST['mykeyday'], $_POST['mykeyyear']);
 
print strftime('%A %d %B %Y', $mydate);
 
print strftime('%A %d %B %Y', $mydate);
</source>
+
</syntaxhighlight>
   −
== Définir votre page de configuration (optionnel) ==
+
==Définir votre page de configuration (optionnel)==
 
'''Quand''': Si votre module offre plusieurs options paramétrables.
 
'''Quand''': Si votre module offre plusieurs options paramétrables.
   −
=== Créer votre page d'édition de configuration ===
+
===Créer votre page d'édition de configuration===
 
Si votre module offre plusieurs options paramétrables, il est nécessaire de créer une page PHP pour éditer les options (qui sont stockées dans la [[Table llx_const|table '''llx_const''']]).
 
Si votre module offre plusieurs options paramétrables, il est nécessaire de créer une page PHP pour éditer les options (qui sont stockées dans la [[Table llx_const|table '''llx_const''']]).
 
Créer une page PHP nommée '''monmodule_setupapage.php''' qui affiche les options possibles et les met à jour.
 
Créer une page PHP nommée '''monmodule_setupapage.php''' qui affiche les options possibles et les met à jour.
Line 320: Line 401:  
Placer cette page de configuration dans le répertoire '''/admin''' également.
 
Placer cette page de configuration dans le répertoire '''/admin''' également.
 
Ensuite dans le descripteur de module, modifier la variable pour indiquer le nom de cette page PHP (sans le chemin qui n'est pas nécessaire, la page étant forcément dans le rep admin).
 
Ensuite dans le descripteur de module, modifier la variable pour indiquer le nom de cette page PHP (sans le chemin qui n'est pas nécessaire, la page étant forcément dans le rep admin).
<source lang="php">
+
<syntaxhighlight lang="php">
 
$this->config_page_url = array("monmodule_setupapage.php");
 
$this->config_page_url = array("monmodule_setupapage.php");
</source>
+
</syntaxhighlight>
   −
=== Tester votre page ===
+
===Tester votre page===
 
Allez sur la page '''Configuration->module''', vous devez voir apparaître une icône qui permet d'accéder à la page de configuration et vous devez être capable de modifier ces options et les voir conservées en base.
 
Allez sur la page '''Configuration->module''', vous devez voir apparaître une icône qui permet d'accéder à la page de configuration et vous devez être capable de modifier ces options et les voir conservées en base.
   −
== Définir vos entrées de menu (optionnel) ==
+
==Définir vos entrées de menu (optionnel)==
 
'''Quand''': Si vous avez créé des pages PHP, il est nécessaire que ces écrans soient accessibles depuis le menu Dolibarr.
 
'''Quand''': Si vous avez créé des pages PHP, il est nécessaire que ces écrans soient accessibles depuis le menu Dolibarr.
   −
=== Définissez vos entrées menus ===
+
===Définissez vos entrées menus===
 
Pour cela, il vous faut définir dans le fichier descripteur de module, le tableau this->menu qui déclare les menus.
 
Pour cela, il vous faut définir dans le fichier descripteur de module, le tableau this->menu qui déclare les menus.
 
Ce tableau contient toutes les entrées qui apparaîtront dans les menus une fois le module activé.
 
Ce tableau contient toutes les entrées qui apparaîtront dans les menus une fois le module activé.
Line 336: Line 417:     
Voici un exemple de déclaration d'entrées de menu dans le fichier descripteur:
 
Voici un exemple de déclaration d'entrées de menu dans le fichier descripteur:
<source lang="php">
+
<syntaxhighlight lang="php">
 
// Main menu entries
 
// Main menu entries
 
$this->menu = array(); // List of menus to add
 
$this->menu = array(); // List of menus to add
Line 371: Line 452:  
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
 
'user'=>2); // 0=Menu for internal users,1=external users, 2=both
 
$r++;
 
$r++;
</source>
+
</syntaxhighlight>
    
Pour conditionner l'accès au menu selon des permission, modifier la propriété '''perms''' du tableau. Voir le chapitre sur les permissions un peu plus loin pour savoir comment ajouter des permissions.
 
Pour conditionner l'accès au menu selon des permission, modifier la propriété '''perms''' du tableau. Voir le chapitre sur les permissions un peu plus loin pour savoir comment ajouter des permissions.
   −
=== Tester vos entrées menus ===
+
===Tester vos entrées menus===
 
Désactiver et réactiver votre module sous Dolibarr, les entrées menus doivent alors apparaître (si la condition dans 'enabled' est vraie).
 
Désactiver et réactiver votre module sous Dolibarr, les entrées menus doivent alors apparaître (si la condition dans 'enabled' est vraie).
   −
== Définir vos propres permissions (optionnel) ==
+
==Définir vos propres permissions (optionnel)==
 
'''Quand''': Si vous voulez ajouter de nouvelles permissions.
 
'''Quand''': Si vous voulez ajouter de nouvelles permissions.
    
La définition des permissions que gérera votre module se fait dans le fichier descripteur créé dans la première étape.
 
La définition des permissions que gérera votre module se fait dans le fichier descripteur créé dans la première étape.
 
Modifier la ligne  
 
Modifier la ligne  
<source lang="php">
+
<syntaxhighlight lang="php">
 
$this->rights_class = 'monmodule'
 
$this->rights_class = 'monmodule'
</source>
+
</syntaxhighlight>
 
pour y mettre la bonne valeur de monmodule.
 
pour y mettre la bonne valeur de monmodule.
    
Ensuite remplissez le tableau $this->rights avec autant d'entrées que de permissions différentes à gérer.
 
Ensuite remplissez le tableau $this->rights avec autant d'entrées que de permissions différentes à gérer.
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
$this->rights[$r][0] = 10001;
 
$this->rights[$r][0] = 10001;
 
$this->rights[$r][1] = 'Libelle par défaut de ma permission';
 
$this->rights[$r][1] = 'Libelle par défaut de ma permission';
Line 397: Line 478:  
$this->rights[$r][5] = 'sousaction';
 
$this->rights[$r][5] = 'sousaction';
 
$r++;
 
$r++;
</source>
+
</syntaxhighlight>
    
Dans $this->rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu '''Infos Système''' sur une installation de Dolibarr opérationnelle pour connaitre les id déjà utilisés.
 
Dans $this->rights[$r][0], mettre un id de permission non déjà pris (Voir dans le menu '''Infos Système''' sur une installation de Dolibarr opérationnelle pour connaitre les id déjà utilisés.
Line 404: Line 485:  
Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaîne action et sousaction sans espaces. Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante:
 
Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaîne action et sousaction sans espaces. Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante:
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
if ($user->rights->monmodule->action->sousaction) ...
 
if ($user->rights->monmodule->action->sousaction) ...
</source>
+
</syntaxhighlight>
   −
== Définir vos propres box (optionnel) ==
+
==Définir vos propres box (optionnel)==
 
'''Quand''': Si votre module amène avec lui une ou plusieurs Boxes.
 
'''Quand''': Si votre module amène avec lui une ou plusieurs Boxes.
   −
=== Définissez vos box ===
+
===Définissez vos box===
 
Pour cela, modifiez les tableaux $this->boxes du fichier descripteur de module.
 
Pour cela, modifiez les tableaux $this->boxes du fichier descripteur de module.
 
Il suffit d'ajouter 2 lignes par fichier box que vous allez créer dans le répertoire '''htdocs/monmodule/core/boxes'''
 
Il suffit d'ajouter 2 lignes par fichier box que vous allez créer dans le répertoire '''htdocs/monmodule/core/boxes'''
    
''Exemple:''
 
''Exemple:''
<source lang="php">
+
<syntaxhighlight lang="php">
 
$this->boxes[0]['file']='mabox0.php@monmodule'
 
$this->boxes[0]['file']='mabox0.php@monmodule'
 
$this->boxes[0]['note']='Ma box 0'
 
$this->boxes[0]['note']='Ma box 0'
Line 422: Line 503:  
$this->boxes[n]['file']='maboxn.php@monmodule'
 
$this->boxes[n]['file']='maboxn.php@monmodule'
 
$this->boxes[n]['note']='Ma box n'
 
$this->boxes[n]['note']='Ma box n'
</source>
+
</syntaxhighlight>
    
Ensuite créer les fichiers '''htdocs/monmodule/core/boxes/mabox0.php''', '''htdocs/monmodule/core/boxes/mabox1.php'''... en prenant exemple sur des box existantes (exemple dans le répertoire '''htdocs/core/boxes''')
 
Ensuite créer les fichiers '''htdocs/monmodule/core/boxes/mabox0.php''', '''htdocs/monmodule/core/boxes/mabox1.php'''... en prenant exemple sur des box existantes (exemple dans le répertoire '''htdocs/core/boxes''')
   −
=== Tester la présence de vos box dans Dolibarr ===
+
===Tester la présence de vos box dans Dolibarr===
 
Désactiver et réactiver le module.
 
Désactiver et réactiver le module.
   Line 433: Line 514:  
Vos box doivent apparaître dans la liste des box activables. Activer les puis aller sur la page d'accueil et vérifier qu'elles s'affichent correctement.
 
Vos box doivent apparaître dans la liste des box activables. Activer les puis aller sur la page d'accueil et vérifier qu'elles s'affichent correctement.
   −
== Définir vos propres exports (optionnel) ==
+
==Définir vos propres exports (optionnel)==
 
'''Quand''': Si votre module amène avec lui des exports prédéfini de données (pour ces propres tables ou des tables déjà existante d'un autre module de Dolibarr).
 
'''Quand''': Si votre module amène avec lui des exports prédéfini de données (pour ces propres tables ou des tables déjà existante d'un autre module de Dolibarr).
   −
=== Définissez l'export ===
+
===Définissez l'export===
 
Pour cela, décommenter et modifier les tableaux $this->export_xxx du votre fichier descripteur de module.
 
Pour cela, décommenter et modifier les tableaux $this->export_xxx du votre fichier descripteur de module.
   −
=== Tester votre export ===
+
===Tester votre export===
 
Aller dans le menu outils -> export de Dolibarr. Votre export doit apparaitre dans la liste des exports prédéfinis disponible (si votre module est bien activé).
 
Aller dans le menu outils -> export de Dolibarr. Votre export doit apparaitre dans la liste des exports prédéfinis disponible (si votre module est bien activé).
 
Le choisir, vous devez alors voir les champs possible définis dans le tableau à l'étape précédente.
 
Le choisir, vous devez alors voir les champs possible définis dans le tableau à l'étape précédente.
 
Choisir quelques champs et tenter une génération du fichier export.
 
Choisir quelques champs et tenter une génération du fichier export.
   −
== Définir vos styles CSS (optionnel) ==
+
==Définir vos styles CSS (optionnel)==
 
'''Quand''': Si dans vos écrans PHP, vous utiliser des classes de styles qui ne sont pas celle des thèmes de Dolibarr (non recommandé).
 
'''Quand''': Si dans vos écrans PHP, vous utiliser des classes de styles qui ne sont pas celle des thèmes de Dolibarr (non recommandé).
    
Cette fonctionnalité est décrite mais pas encore opérationnel en 2.4
 
Cette fonctionnalité est décrite mais pas encore opérationnel en 2.4
   −
=== Créer et déclarer votre feuille de style ===
+
===Créer et déclarer votre feuille de style===
 
Créer un fichier de style css nommé '''monmodule.css''' ou '''monmodule.css.php''' et le placer dans le répertoire '''''monmodule''''' dans '''htdocs'''. Il ne peut y avoir qu'un fichier css propre à chaque module.
 
Créer un fichier de style css nommé '''monmodule.css''' ou '''monmodule.css.php''' et le placer dans le répertoire '''''monmodule''''' dans '''htdocs'''. Il ne peut y avoir qu'un fichier css propre à chaque module.
 
Rappelons qu'il vaut mieux utiliser les styles déjà existant de Dolibarr (le fichier css utilisé par Dolibarr étant le fichier '''themes/nomtheme/''nomtheme''.css.php'''). Ne créer un fichier css propre à votre module que si vous devez absolument gérer des styles non déjà existants.
 
Rappelons qu'il vaut mieux utiliser les styles déjà existant de Dolibarr (le fichier css utilisé par Dolibarr étant le fichier '''themes/nomtheme/''nomtheme''.css.php'''). Ne créer un fichier css propre à votre module que si vous devez absolument gérer des styles non déjà existants.
Line 455: Line 536:  
La valeur à renseigner ici doit être le chemin relatif de l'URL de votre fichier css.
 
La valeur à renseigner ici doit être le chemin relatif de l'URL de votre fichier css.
 
Par exemple
 
Par exemple
<source lang="php">
+
<syntaxhighlight lang="php">
 
$this->module_parts = array('css' => array('/monmodule/css/monmodule.css.php'));
 
$this->module_parts = array('css' => array('/monmodule/css/monmodule.css.php'));
</source>
+
</syntaxhighlight>
   −
=== Tester votre feuille de style ===
+
===Tester votre feuille de style===
 
Désactiver et réactiver votre module.
 
Désactiver et réactiver votre module.
   Line 466: Line 547:  
Vous devriez voir dans l'entête HTML, une ligne déclarant votre feuille de style.
 
Vous devriez voir dans l'entête HTML, une ligne déclarant votre feuille de style.
   −
== Définir vos fonctions Javascript (optionnel) ==
+
==Définir vos fonctions Javascript (optionnel)==
 
'''Quand''': Si dans vos écrans PHP, vous utiliser des fonctions javascript non dispo en standard (fichier lib_head.js)
 
'''Quand''': Si dans vos écrans PHP, vous utiliser des fonctions javascript non dispo en standard (fichier lib_head.js)
   Line 473: Line 554:     
Exemple pour la page /htdocs/monmodule/mapage.php :
 
Exemple pour la page /htdocs/monmodule/mapage.php :
<source lang="php">
+
<syntaxhighlight lang="php">
 
require('../main.inc.php');
 
require('../main.inc.php');
 
$morejs=array("/monmodule/js/monmodule.js");
 
$morejs=array("/monmodule/js/monmodule.js");
 
llxHeader('','Titre','','','','',$morejs,'',0,0);  
 
llxHeader('','Titre','','','','',$morejs,'',0,0);  
</source>
+
</syntaxhighlight>
   −
== Déclencher du code sur un évènement Dolibarr (optionnel) ==
+
==Déclencher du code sur un évènement Dolibarr (optionnel)==
 
'''Quand''': Si vous voulez que des actions particulières s'exécutent suite au déclenchement d'actions standards de Dolibarr (exemple: je veux mettre à jour une table de mon module quand une facture se crée dans Dolibarr), il vous faut créer un fichier de '''triggers'''.
 
'''Quand''': Si vous voulez que des actions particulières s'exécutent suite au déclenchement d'actions standards de Dolibarr (exemple: je veux mettre à jour une table de mon module quand une facture se crée dans Dolibarr), il vous faut créer un fichier de '''triggers'''.
   Line 485: Line 566:  
et [[Interfaces_Exterieur_vers_Dolibarr|Interfaces exterieures vers Dolibarr]]
 
et [[Interfaces_Exterieur_vers_Dolibarr|Interfaces exterieures vers Dolibarr]]
   −
== Insérer votre code aux emplacement hooks de Dolibarr (optionnel) ==
+
==Insérer votre code aux emplacement hooks de Dolibarr (optionnel)==
 
'''Quand''': Quand vous voulez modifier ou ajouter du code autrement que lors d'un événement métier (voir le chapitre précédent pour cela).
 
'''Quand''': Quand vous voulez modifier ou ajouter du code autrement que lors d'un événement métier (voir le chapitre précédent pour cela).
    
Voir la page [[Système de Hooks]].
 
Voir la page [[Système de Hooks]].
   −
== Ajouter un module de numérotation (optionnel) ==
+
==Ajouter un module de numérotation (optionnel)==
 
'''Quand''': Lorsque vous voulez ajouter une règle de numérotation non couverte par les modules par défaut.
 
'''Quand''': Lorsque vous voulez ajouter une règle de numérotation non couverte par les modules par défaut.
    
Voir la page [[Créer un module de numérotation]].
 
Voir la page [[Créer un module de numérotation]].
   −
== Ajouter un nouveau modèle de document (optionnel) ==
+
==Ajouter un nouveau modèle de document (optionnel)==
 
'''Quand''': Lorsque vous voulez ajouter un nouveau modèle de document.
 
'''Quand''': Lorsque vous voulez ajouter un nouveau modèle de document.
    
La documentation au sujet de la génération de documents depuis des modèles est disponible sur la page [[Créer un modèle de document PDF]] ou [[Créer un modèle de document ODT]].
 
La documentation au sujet de la génération de documents depuis des modèles est disponible sur la page [[Créer un modèle de document PDF]] ou [[Créer un modèle de document ODT]].
   −
== Ajouter un thème (optionnel) ==
+
==Ajouter un thème (optionnel)==
 
'''Quand''': Lorsque vous voulez une interface aux couleurs personnalisées à votre cas.
 
'''Quand''': Lorsque vous voulez une interface aux couleurs personnalisées à votre cas.
    
Voir la page [[Themes]].
 
Voir la page [[Themes]].
   −
= [[File:Art.png]] Quelques règles de codage et fonctions pour développeurs =
+
=[[File:Art.png]] Quelques règles de codage et fonctions pour développeurs=
 
Les règles de codage à suivre sont définis dans la [[Documentation Développeur|Documentation développeur]], rubrique "Informations Générales - Langage et normes de développement".
 
Les règles de codage à suivre sont définis dans la [[Documentation Développeur|Documentation développeur]], rubrique "Informations Générales - Langage et normes de développement".
    
De nombreuses fonctions prédéfinies pour les développeurs sont disponibles et décrites sur la page [[Documentation Développeur|Documentation développeur]] sous la section "Les couches techniques de Dolibarr".
 
De nombreuses fonctions prédéfinies pour les développeurs sont disponibles et décrites sur la page [[Documentation Développeur|Documentation développeur]] sous la section "Les couches techniques de Dolibarr".
   −
= [[File:Art.png]] Utilisation du MDA =
+
=[[File:Art.png]] Créer un package pour livrer et installer votre module=
Une méthode pour générer un module fonctionnel depuis l'UML est en cours de mise au point. Plus d'informations sur la page [[UML2Dolibarr - Générer un module par MDA]].
  −
 
  −
= [[File:Art.png]] Créer un package pour livrer et installer votre module =
   
Cette procédure doit être utilisé pour fabriquer un package afin de le soumettre sur la place de marché http://www.dolistore.com.
 
Cette procédure doit être utilisé pour fabriquer un package afin de le soumettre sur la place de marché http://www.dolistore.com.
 
Mais vous pouvez aussi l'utiliser pour distribuer facillement votre module via votre propre réseau de distribution.
 
Mais vous pouvez aussi l'utiliser pour distribuer facillement votre module via votre propre réseau de distribution.
   −
* Aller dans le répertoire '''/build''' et recopier le fichier '''makepack-dolibarrmodules.conf''' en '''makepack-monmodule.conf'''. Attention, ce répertoire peut ne pas être fourni dans les packages de versions stables. Si c'est le cas, il peut être récupéré dans le snapshot disponible en téléchargement sur le site web Dolibarr dans la rubrique Version de développement (prendre dans ce cas tout le répertoire build qui est un répertoire autonome et indépendant de la version).
+
*Aller dans le répertoire '''/build''' et recopier le fichier '''makepack-dolibarrmodules.conf''' en '''makepack-monmodule.conf'''. Attention, ce répertoire peut ne pas être fourni dans les packages de versions stables. Si c'est le cas, il peut être récupéré dans le snapshot disponible en téléchargement sur le site web Dolibarr dans la rubrique Version de développement (prendre dans ce cas tout le répertoire build qui est un répertoire autonome et indépendant de la version).
 +
 
 
Saisissez dans ce fichier la liste des noms des nouveaux fichiers que vous avez créé pour votre module (descripteur de module, nouveaux fichiers sql de tables, page php, images, etc...)
 
Saisissez dans ce fichier la liste des noms des nouveaux fichiers que vous avez créé pour votre module (descripteur de module, nouveaux fichiers sql de tables, page php, images, etc...)
   −
* Lancer le script via Perl (besoin de la version Perl 5.0 ou +):
+
*Lancer le script via Perl (besoin de la version Perl 5.0 ou +):
<source lang="bash">
+
 
 +
<syntaxhighlight lang="bash">
 
perl makepack-dolibarrmodule.pl
 
perl makepack-dolibarrmodule.pl
</source>
+
</syntaxhighlight>
 
Le script vous demande le nom de votre module, sa version majeure et mineure.
 
Le script vous demande le nom de votre module, sa version majeure et mineure.
 
Un fichier '''monmodule.zip''' va alors être fabriqué contenant votre module prêt pour être déployé.
 
Un fichier '''monmodule.zip''' va alors être fabriqué contenant votre module prêt pour être déployé.
   −
* La personne qui reçoit votre module doit alors placer le fichier dans son répertoire racine d'installation de Dolibarr et réaliser la commande:
+
*La personne qui reçoit votre module doit alors placer le fichier dans son répertoire racine d'installation de Dolibarr et réaliser la commande:
<source lang="bash">
+
 
 +
<syntaxhighlight lang="bash">
 
tar -xvf monmodule.zip
 
tar -xvf monmodule.zip
</source>
+
</syntaxhighlight>
   −
* Si vous désirez que votre module profite à tous, vous pouvez le soumettre (le fichier zip) sur la place de marché des modules complémentaires: {{LinkToPluginDownload}} (vous devez avoir créer un compte auparavant et utiliser le lien "Soumettre un module/produit").
+
*Si vous désirez que votre module profite à tous, vous pouvez le soumettre (le fichier zip) sur la place de marché des modules complémentaires: {{LinkToPluginDownload}} (vous devez avoir créer un compte auparavant et utiliser le lien "Soumettre un module/produit").
** Si votre module a été fabriqué correctement, le fichier sera validé rapidement.
+
**Si votre module a été fabriqué correctement, le fichier sera validé rapidement.
** Si la qualité est suffisante, que la licence le permet et que la fonctionnalité du module s'avère être d'un intérêt général, le code pourra être ajouté au code source de Dolibarr (sauf si vous ne le désirez pas).
+
**Si la qualité est suffisante, que la licence le permet et que la fonctionnalité du module s'avère être d'un intérêt général, le code pourra être ajouté au code source de Dolibarr (sauf si vous ne le désirez pas).
   −
= [[File:Art.png]] Validation/activation du module externe sur Dolistore =
+
=[[File:Art.png]] Validation/activation du module externe sur Dolistore=
    
Voir [[Module_Dolistore_Validation_Regles|Règles de Validation]]
 
Voir [[Module_Dolistore_Validation_Regles|Règles de Validation]]
1,977

edits