Changes

m
Updating interlang links (links to translated versions of this page in other languages) triggered by origin English page "Module_development" update.
Line 7: Line 7:  
[[es:Desarrollo_de_un_módulo]]
 
[[es:Desarrollo_de_un_módulo]]
 
[[zh:模块开发]]
 
[[zh:模块开发]]
 +
[[ja:モジュール_開発]]
 
<!-- END interlang links -->
 
<!-- END interlang links -->
   Line 14: 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.
 
*Substitutionsvariablen hinzufügen
 
*Substitutionsvariablen hinzufügen
*Definieren von neuen Berechtigungen
+
*Neue Berechtigungen festlegen
*Triggercode für eine automatisierte Dolibarr-Aktion
+
*Triggercode bei einer bestimmten Dolibarr-Aktion auslösen
 
*Eigenen Code an den Dolibarr-Hooks einhängen
 
*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 Themen
+
*Hinzufügen eigenes Designs/Themevorlage
    
etc...
 
etc...
    +
In den folgenden Kapiteln erfahren Sie, wie Sie all dies auf einfache Weise manuell umsetzen können.
 +
***
   −
In den folgenden Kapiteln erfahren Sie, wie Sie dies, auf eine einfache Weise, selbst erledigen 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=
 
=[[File:Art.png]] Beispielvorlage für ein Modul/Pluginodule=
Line 85: Line 137:  
Danach öffnen Sie die Deskriptordatei und prüfen in der Funktion '''init''', das die folgende Zeile '''nicht''' kommentiert ist.
 
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>
    
''Befolgen Sie folgende Regeln:''
 
''Befolgen Sie folgende Regeln:''
Line 95: Line 147:     
Beispiel für den Inhalt der Datei '''data.sql'''
 
Beispiel für den Inhalt der Datei '''data.sql'''
<source lang="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.
 
Dateien müssen für eine MySQL-Datenbank konzipiert sein.
Line 111: Line 163:     
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 126: Line 178:     
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.
Line 157: 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/) :
Line 176: 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 188: 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 194: 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 205: 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 215: 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 232: 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
 
// Load Dolibarr environment
 
$res=0;
 
$res=0;
Line 247: Line 299:  
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 262: Line 314:     
''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+)===
  −
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===
 
===Accès à la base===
Line 286: 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 316: Line 363:  
}
 
}
 
}
 
}
</source>
+
</syntaxhighlight>
    
===Définition du style===
 
===Définition du style===
Line 331: Line 378:  
===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 340: 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)==
Line 354: 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===
Line 370: 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 405: 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.
Line 417: Line 464:  
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 431: 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 438: 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)==
Line 450: Line 497:     
''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 456: 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''')
Line 489: 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===
Line 507: 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)==
Line 554: Line 601:  
*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é.
Line 562: Line 609:  
*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").
1,978

edits