Open main menu

Changes

Développement module

2,507 bytes added, 7 months ago
m
Corrections orthographiques
<!-- 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]]
[[es:Desarrollo_de_un_módulo]]
[[de:Modul_Entwicklung]]
[[zh:模块开发]]
<!-- END interlang links -->
 
[[Category:Noyau]]
{{TemplateDocDev}}
Pour créer un nouveau module, il existe plusieurs étapes. Ce didacticiel a pour but de vous décrire chacune d'elle elles afin d'ajouter un module permettant d'étendre les possibilités de Dolibarr, comme par exemple ajouter une ou plusieurs des fonctionnalités suivantes: * Ajouter de nouvelles tables en base* Ajouter vos propres entrées dans les menus* Ajouter des écrans de saisie/consultation de nouvelle tables* Ajouter ou supprimer des onglets sur les pages de vues/édition des objets (facture, produit, commande, événement, ...)* Ajouter des exports prédéfinis pour la fonction export* Ajouter de nouvelles boites pour la home page* Ajouter des variables de substitutionssubstitution* Définir de nouvelles permissions* Déclencher du code automatiquement sur une action Dolibarr particulière* Insérer votre code aux emplacement emplacements hooks de Dolibarr* Ajouter un module de numérotation* Ajouter un modèle de document* Ajouter un nouveau thème 
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  =[[File:Art.png]] Création de Module avec le générateur de module=Depuis Dolibarr 9.0 il est possible de créer les développeurs très expérimentés, une méthode par génération MDA est en cours fichiers principaux de votre module avec le "Générateur de mise au pointmodule" (aussi appelé "Module Builder"). Voir Pour l'activer : *Activez le dernier chapitre pour celamodule "Générateur de Module" dans la section "Outils multi-modules" [[File:Mod_builder_2.png|400px]]
*puis cliquez sur l’icône "bug" qui est apparue dans la barre de menu en haut à droite
= [[File:ArtMod_builder_3.png|400px]] Exemple de modèle de module externe=
=[[File:Art.png]] Exemple de modèle de module externe=Un bon modéle/squelette de module externe Dolibarr est disponible ici : [https://github.com/rdoursenaudDolibarr/dolibarr-module-/tree/develop/htdocs/modulebuilder/template GitHub Dolibarr Module Modèle]
= [[File:Art.png]] Créer un module =
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.
== Créer un descripteur de Module (obligatoire) =='''Quand''': Obligatoire dès qu'une extension est développée, quelle que soit sa vocation (sauf pour l'ajout de thème thèmes ou de modèle modèles de documentdocuments).'''Depuis Dolibarr 9.0, il est possible de créer le descripteur de votre module avec le "Générateur de module"''' ===Créer votre descripteur avec le générateur de module===
*Lancez le générateur de module en cliquant sur l’icône "bug" [[File:Mod_builder_3.png|400px]] *Entrez le nom de votre module sans espaces (le nom de votre module NE DOIT PAS CONTENIR le caractère underscore ou tiret bas : _) [[File:Mod_builder_4.png|400px]] *Vous pourrez alors modifier les paramètres du descriptif du module : [[File:Mod_builder_5.png|400px]] === Créer Alternative : créer votre descripteur manuellement (sans utiliser le générateur de module)===
La première étape est donc de créer un fichier de description du module (descripteur). Pour cela:
 * Créer Créez le répertoire '''/htdocs/''monmodule''/core/modules'''. Puis, aller allez dans le répertoire '''dev/skeletons''' et recopier recopiez 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 modifiez 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 '<nowiki/>'''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.
=== Tester votre descripteur ===
Lancer Lancez Dolibarr et aller allez 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.
===Nom de module=== Le nom de votre module NE DOIT PAS CONTENIR le caractère underscore ou tiret bas : _ == Arborescence d'un nouveau module ==
Voici l'arborescence à respecter pour l'organisation des fichiers d'un module.
{{TemplateModuleTreeSimple}}
Un bon modèle /squelette de module a été crée par un contributeur externe Dolibarr, il est accessible disponible ici : [https://github.com/rdoursenaudDolibarr/dolibarr-module-/tree/develop/htdocs/modulebuilder/templateGitHub Dolibarr Module Modèle]
== Créer vos tables SQL et les classes PHP DAO (optionnel) ==
'''Quand''': Si votre module a besoin de gérer des données qui lui sont propres
=== Créer vos fichiers .sql ===
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.
''Règles à respecter:''
 * Ajouter Ajoutez 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).*Les types et noms recommandés pour les champs SQL sont définis sur la page [[https://wiki.dolibarr.org/index.php/Langages_et_normes#R.C3.A8gles_de_codage_SQL]].* Pour ce qui est des commandes pour permettant d'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/'''.*N'utilisez pas "chaine" mais 'chaine' car les guillemets doubles (") ont une signification particulière en PostGreSQL 
Exemple de contenu de fichier data.sql
<source lang="sql">
Les ordres SQL des fichiers doivent être opérationnels pour la base de données '''mysql'''.
Rem: Les fichiers des autres bases ne sont pas à maintenir. Ils sont lus et convertit convertis à la volée par le driver de la base de données.
=== Tester vos fichier fichiers .sql ===
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.
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 ===
Une fois votre ou vos tables créées en base, aller allez 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>
Remarque: Si la commande ne fonctionne pas, essayer essayez d'utiliser php-cli plutot que php.
Ceci génèrera un fichier '''out.nomtable.class.php''' qui contient la classe de gestion de la table nomtable.
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) ==
=== 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...)
Pour cela, aller allez dans le fichier descripteur de module précédemment créé et modifier modifiez le tableau $this->tabs:
<source lang="php">
// Array to add new pages in new tabs or remove existing one
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 ":"
 * Partie 1: Le le type d'élément (objecttype) dans lequel doit apparaître l'onglet qui est une valeur parmi celle-ci:
{{TemplateModuleTabs-fr}}
 * Partie 2: Nom nom de code pour l'onglet à ajouter (commence par +) ou à enlever (commence par -)* Partie 3: Le le titre de l'onglet. Cela peut être un libellé en dur ou mieux un code traduction présent dans un fichier lang.* Partie 4: Le 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 5: Une une condition à tester pour savoir si l'onglet doit être visible ou pas. Mettre '1' pour qu'il soit toujours visible.* Partie 6: Ll'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 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 ===
'''Quand''' : Pour afficher les onglets standard d'une fiche entité (produit, tiers, etc.) sur votre propre page onglet d'une entité.
<source lang="php">require_once($url_fichier) ;</source>
Voici quelques examples exemples de fichiers à inclure (DOL_DOCUMENT_ROOT correspond au dossier dolibarr/htdocs/) : * Entité tiers (thirdparty) :** DOL_DOCUMENT_ROOT/societe/class/societe.class.php** DOL_DOCUMENT_ROOT/core/lib/company.lib.php* Entité produit (product) :** DOL_DOCUMENT_ROOT/product/class/product.class.php** DOL_DOCUMENT_ROOT/core/lib/product.lib.php* Entité facture (invoice) :** 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'''
Créer Créez l'objet de la classe voulue, et récupérer récupérez les données de l'objet à partir de la base de données. Pour cela il faut utiliser les fonctions fetch() de la classe correspondante, en passant en paramètre l'identifiant de l'objet que vous récupérez depuis l'url (ex : /mononglet.php?id=1).
''Exemple :''
'''3. Récupérer la liste des onglets correspondants à l'entité choisie'''
Utiliser Utilisez la fonction XXX_prepare_head($obj), ou XXX est le nom de l'entité, permettant de créer un tableau contenant les définitions des onglets à afficher. Le paramètre à passer est l'objet pour lequel vous voulez afficher les onglets.
Le tableau retourné est composé de la façon suivante :
'''4. Afficher les onglets sur votre page onglet'''
Utiliser Utilisez la fonction dol_fiche_head() qui affiche les onglets contenus dans le tableau $head retourné par XX_prepare_head().
<source lang="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.
''Remarque'':
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) =='''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 ===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/skeletonsmodulebuilder''' (Pour le développement d'un script en ligne de commande, voir [[Développement de scripts]]).
Pour créer une nouvelle page écran utilisateur, créer créez un sous-répertoire de '''htdocs''' (si non déjà fait) propre à votre module (Dans '''htdocs/monmodule''' par exemple) afin d'y placer les pages que vous aller allez créer.
Y recopier le fichier '''skeleton_pagemyobject_page.php''' qui va servir de point de départ.Modifier Modifiez le fichier afin que le main.inc.php soit trouvéstrouvé
<source lang="php">
// Load Dolibarr environment
$res=0;
// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)if (! $res && file_exists! 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 calculated 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"); // to work Try main.inc.php using relative pathif your module directory is into dolibarr root htdocs directory(! $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("../../../ to work if your module directory is into a subdir of root htdocs directorymain.inc.php")) $res=@include("../../../main.inc.php");
if (! $res) die("Include of main fails");
</source>
Notez qu'il Comme vous pouvez le constater, plusieurs tentatives de chargement du fichier main.inc.php (ou master.inc.php) ont été tentées. Le but est possible que vous deviez ajouter de réussir dans le plus grand nombre de cas possibles. Le minimum est de "2 lignes: une pour essayer de charger le fichier master / main.inc./" php dans les chemin, en fonction le répertoire racine de dolibarr et une autre pour essayer de la profondeur charger le fichier afin de vos fichiers par rapport au prendre en charge le cas où le module est déployé dans le répertoire "custom". Mais vous pouvez avoir à gérer plus de votre modulesituations. L'exemple fourni devrait pouvoir charger le fichier main / master.inc.php dans presque toutes les situations / configurations.
Pour tous les modules développés après la version 3Notez que vous pouvez ajouter plus "..2 /" en fonction de Dolibarr, il convient de pouvoir placer un répertoire la profondeur du fichier par rapport à l'arborescence de votre module soit dans '''htdocs''' soit dans un sous répertoire comme '''htdocs/custom''' sans avoir à modifier le code source du module, c'est pour cela que cette règle doit obligatoirement être appliquée.
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.* $conf L'objet qui contient la configuration de Dolibarr.* $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. *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 :''
<source lang="php">
</source>
* L'appel des classes fournies en standard avec Dolibarr se fera par contre par le require_once directe avec la syntaxe suivante: 
''Exemple :''
<source lang="php">
require_once DOL_DOCUMENT_ROOT.'/core/class/doli.class.php';
</source>
La raison est que si le dol_include_once est pratique car il scanne chaque répertoire de chemin alternatifs alternatif 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+) ===Certaines portion portions d'écran de Dolibarr sont isolés isolées 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 toutefois vous voulez faire des accès dans des tables sans objet PHP dédié, ceci reste possible (par exemple pour récupérer une liste d'enregistrement). Dans ce cas, pensez à suivre ces exemples:
Pour un insert, update ou delete:
<source lang="php">
</source>
Pour une lecture:
<source lang="php">
</source>
=== 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.
Par exemple:
* 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="'''flat'''" sur tous les champs de saisie (''input, select, textarea''...).* class="'''button'''" sur les objets de type ''input type="submit"''.
=== Utiliser Utilisez 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:
<source lang="php">
$form->select_date('','mykey',0,0,0,"myform");
</source>
La chaine chaîne 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).
L'affichage d'un sélecteur de date doit donc être intégrée intégré dans une zone FORM Html.
Pour récupérer la valeur, à l'issu du POST, la commande est:
</source>
== Définir votre page de configuration (optionnel) =='''Quand''': Si si votre module offre plusieurs options paramétrables.
=== Créer Créez 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''']]).
Créer Créez une page PHP nommée '''monmodule_setupapage.php''' qui affiche les options possibles et les met à jour.
Il est nécessaire de prendre exemple sur une page dans '''/admin''' qui vous montre la méthode pour lire ou sauvegarder en base votre option.
Placer Placez cette page de configuration dans le répertoire '''/admin''' également.Ensuite dans le descripteur de module, modifier modifiez 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">
$this->config_page_url = array("monmodule_setupapage.php");
</source>
=== Tester Testez 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.
== Définir vos entrées de menu (optionnel) =='''Quand''': Si 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 ===
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é.
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 Testez 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éfinir vos propres permissions (optionnel) =='''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.
</source>
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 connaître les id déjà utilisés.
Dans $this->rights[$r][3], mettre 1 si cette permission est attribué d'office par défaut quand un utilisateur est créé.
Dans $this->rights[$r][1], mettre un libellé par défaut (il sera affiché si aucune traduction n'est trouvé pour votre permission dans le fichier '''admin.lang''').
Dans $this->rights[$r][4] et $this->rights[$r][5], mettre une chaîne action et sousaction sous action sans espacesespace. Vous pourrez alors tester dans le code PHP si un utilisateurs a bien les droits par la séquence suivante:
<source lang="php">
</source>
== Définir vos propres box (optionnel) =='''Quand''': Si si votre module amène avec lui une ou plusieurs Boxes.
=== Définissez vos box ===
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'''
''Exemple:''
<source lang="php">
$this->boxes[0]['file']='mabox0.php@monmodule'
</source>
Ensuite créer créez 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 Testez la présence de vos box dans Dolibarr ===Désactiver Désactivez et réactiver réactivez le module.
Aller Allez dans le menu '''Accueil - Configuration - Boite'''.
Vos box doivent apparaître dans la liste des box activables. Activer Activez les puis aller allez sur la page d'accueil et vérifier vérifiez qu'elles s'affichent correctement.
== Définir vos propres exports (optionnel) =='''Quand''': Si si votre module amène avec lui des exports prédéfini prédéfinis de données (pour ces propres tables ou des tables déjà existante existantes d'un autre module de Dolibarr).
=== Définissez l'export ===Pour cela, décommenter décommentez et modifier modifiez les tableaux $this->export_xxx du votre fichier descripteur de module.
=== Tester Testez votre export ===Aller Allez dans le menu outils -> export de Dolibarr. Votre export doit apparaitre dans la liste des exports prédéfinis disponible disponibles (si votre module est bien activé).Le choisir, vous devez alors voir les champs possible possibles définis dans le tableau à l'étape précédente.Choisir Choissez quelques champs et tenter tentez une génération du fichier export.
== Définir vos styles CSS (optionnel) =='''Quand''': Si lorsque 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
=== Créer Créez et déclarer déclarez votre feuille de style ===Créer Créez un fichier de style css nommé '''monmodule.css''' ou '''monmodule.css.php''' et placez 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 créez un fichier css propre à votre module que si vous devez absolument gérer des styles non déjà existants.Une fois votre feuille de style prête, déclarer déclarez la dans votre fichier descripteur de module en modifiant la propriété '''$this->module_parts'''.
La valeur à renseigner ici doit être le chemin relatif de l'URL de votre fichier css.
Par exemple
</source>
=== Tester Testez votre feuille de style ===Désactiver Désactivez et réactiver réactivez votre module.
Appelez la page d'accueil de Dolibarr. Afficher Affichez la source de la page HTML.
Vous devriez voir dans l'entête HTML, une ligne déclarant votre feuille de style.
== Définir vos fonctions Javascript (optionnel) =='''Quand''': Si lorsque dans vos écrans PHP, vous utiliser des fonctions javascript non dispo en standard (fichier lib_head.js)
Si dans vos écrans PHP, vous utilisez des fonctions javascript, il est nécessaire de faire en sorte que vos fonctions déclarées dans un fichier javascript '''htdocs/monmodule/js/monmodule.js''' soit chargées dans l'entête head html.
</source>
== Déclencher du code sur un évènement Dolibarr (optionnel) =='''Quand''': Si lorsque 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'''.
Voir aussi [[Interfaces_Dolibarr_vers_exterieur|Interfaces de Dolibarr vers l'exterieur]]
et [[Interfaces_Exterieur_vers_Dolibarr|Interfaces exterieures vers Dolibarr]]
== Insérer votre code aux emplacement hooks de Dolibarr (optionnel) =='''Quand''': Quand lorsque 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]].
== Ajouter un module de numérotation (optionnel) =='''Quand''': Lorsque 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]].
== Ajouter un nouveau modèle de document (optionnel) =='''Quand''': Lorsque 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]].
== Ajouter un thème (optionnel) ==
'''Quand''': Lorsque vous voulez une interface aux couleurs personnalisées à votre cas.
Voir la page [[Themes]].
= [[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".
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 Créer un package pour livrer et installer votre module=Une méthode Cette procédure doit être utilisée pour générer fabriquer un module fonctionnel depuis l'UML est en cours package afin de le soumettre sur la place de mise au pointmarché http://www.dolistore. Plus dcom.Mais vous pouvez aussi l'informations sur la page [[UML2Dolibarr - Générer un utiliser pour distribuer facillement votre module par MDA]]via votre propre réseau de distribution.
= [[File:Art*Allez dans le répertoire '''/build''' et recopiez le fichier '''makepack-dolibarrmodules.conf''' en '''makepack-monmodule.conf'''.png]] Créer un package pour livrer et installer votre module =Cette procédure doit Attention, ce répertoire peut ne pas être utilisé pour fabriquer un package afin fourni dans les packages de versions stables. Si c'est le soumettre cas, il peut être récupéré dans le snapshot disponible en téléchargement sur le site web Dolibarr dans la place rubrique Version de marché http://www.dolistore.com.Mais vous pouvez aussi l'utiliser pour distribuer facillement votre module via votre propre réseau développement (prenez dans ce cas tout le répertoire build qui est un répertoire autonome et indépendant de distributionla 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...)
* Lancer le script via Perl (besoin de la version Perl 5.0 ou +): 
<source lang="bash">
perl makepack-dolibarrmodule.pl
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: 
<source lang="bash">
tar -xvf monmodule.zip
</source>
* 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 créé un compte auparavant et utiliser le lien "Soumettre un module/produit").** 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).
= [[File:Art.png]] Validation/activation du module externe sur Dolistore =
Voir [[Module_Dolistore_Validation_Regles|Règles de Validation]]
2

edits