Line 5:
Line 5:
−
== Versions ==
+
= Versions =
* Dolibarr doit fonctionner sur:
* Dolibarr doit fonctionner sur:
Line 12:
Line 12:
# Mysql 3.1 ou +
# Mysql 3.1 ou +
−
== Normes PHP ==
+
= Normes PHP =
* Dolibarr est écrit en PHP et supporte toutes versions PHP supérieures à la 4.1. Les fichiers doivent tous comporter l'extension .php
* Dolibarr est écrit en PHP et supporte toutes versions PHP supérieures à la 4.1. Les fichiers doivent tous comporter l'extension .php
Line 63:
Line 63:
A ce jour, très peu de fonctions respectent ce standard mais c'est celui vers lequel il faut tendre.
A ce jour, très peu de fonctions respectent ce standard mais c'est celui vers lequel il faut tendre.
−
== Normes SQL ==
+
= Normes SQL =
* Les SELECT * sont interdits ! Chaque SELECT doit spécifier la liste complète des champs à récupérer. Cela permet d'éviter les confusions. Exemple:
* Les SELECT * sont interdits ! Chaque SELECT doit spécifier la liste complète des champs à récupérer. Cela permet d'éviter les confusions. Exemple:
Line 85:
Line 85:
* Les fonctions NOW ou SYSDATE sont interdites au sein des ordres SQL. S'il faut saisir la date du moment dans un champ, la valeur doit venir du PHP et non du moteur de base de données. Ceci afin d'avoir une meilleure portabilité du code mais surtout d'avoir une gestion correcte des TimeZone.
* Les fonctions NOW ou SYSDATE sont interdites au sein des ordres SQL. S'il faut saisir la date du moment dans un champ, la valeur doit venir du PHP et non du moteur de base de données. Ceci afin d'avoir une meilleure portabilité du code mais surtout d'avoir une gestion correcte des TimeZone.
−
== Normes HTML ==
+
= Normes HTML =
* Tous les attributs dans les balises HTML doivent être *en minuscule* et quotés avec des *doubles quote* (Norme xhtml)
* Tous les attributs dans les balises HTML doivent être *en minuscule* et quotés avec des *doubles quote* (Norme xhtml)
Line 107:
Line 107:
* Les scripts externes sont écrits en Perl s'ils ne peuvent l'être en php, l'utilisation d'un autre langage n'est pas interdit mais doit être discuté au préalable dans la mailing list des développeurs. Le langage devra être maitrisé par au moins 2 développeurs pour en assurer la maintenance.
* Les scripts externes sont écrits en Perl s'ils ne peuvent l'être en php, l'utilisation d'un autre langage n'est pas interdit mais doit être discuté au préalable dans la mailing list des développeurs. Le langage devra être maitrisé par au moins 2 développeurs pour en assurer la maintenance.
−
== Normes Dolibarr et squelettes de code ==
+
= Normes Dolibarr et squelettes de code ==
−
=== Squelettes de code ===
+
== Squelettes de code ==
Afin d'uniformiser le code et d'accélérer le développement de nouveaux composants dans Dolibarr, se trouvent dans le répertoire '''dev/skeletons''', 4 squelettes de code tout préparés.
Afin d'uniformiser le code et d'accélérer le développement de nouveaux composants dans Dolibarr, se trouvent dans le répertoire '''dev/skeletons''', 4 squelettes de code tout préparés.
Line 120:
Line 120:
Notons que ces squelettes sont aussi utilisés par le générateur de code PHP qui est décrit dans la chapitre de développement de module Dolibarr pour accélérer vos développement.
Notons que ces squelettes sont aussi utilisés par le générateur de code PHP qui est décrit dans la chapitre de développement de module Dolibarr pour accélérer vos développement.
−
=== Les dates et TimeZone ===
+
== Les dates et TimeZone ==
Dolibarr se veut une application mutli-utilisateur et multi-localisation. Il convient donc de stocker les dates dans le bon format. Pour éviter les problèmes de conversion, les règles suivantes doivent être appliquées:
Dolibarr se veut une application mutli-utilisateur et multi-localisation. Il convient donc de stocker les dates dans le bon format. Pour éviter les problèmes de conversion, les règles suivantes doivent être appliquées:
* Une date en mémoire doit être au format Timestamp GMT.
* Une date en mémoire doit être au format Timestamp GMT.
Line 130:
Line 130:
* Les dates mises à jour automatiquement par la base (champ '''tms''' en base) contiennent le Timestamp GMT au moment où la modification est faite. Les méthodes select récupèrent directement cette donnée en mémoire au format Timestamp GMT.
* Les dates mises à jour automatiquement par la base (champ '''tms''' en base) contiennent le Timestamp GMT au moment où la modification est faite. Les méthodes select récupèrent directement cette donnée en mémoire au format Timestamp GMT.
−
=== L'encodage UTF8/ISO ===
+
== L'encodage UTF8/ISO ==
Dolibarr stocke les informations de manière suivante:
Dolibarr stocke les informations de manière suivante:
* En base de donnée, les données sont en UTF8 ou ISO. Cela dépend du pagecode de la base, donc des options à la création de cette base. Dans tous les cas le driver d'accès base Dolibarr (dans /lib/database) s'arrange à la lecture et insertion pour convertir vers et depuis de l'UTF8.
* En base de donnée, les données sont en UTF8 ou ISO. Cela dépend du pagecode de la base, donc des options à la création de cette base. Dans tous les cas le driver d'accès base Dolibarr (dans /lib/database) s'arrange à la lecture et insertion pour convertir vers et depuis de l'UTF8.
Line 136:
Line 136:
* Les pages web affichées à l'écran sont au format UTF8 (avec les versions < 2.5.1, c'est le vieux paramètre $character_set du fichier conf.php qui définissait le format de sortie).
* Les pages web affichées à l'écran sont au format UTF8 (avec les versions < 2.5.1, c'est le vieux paramètre $character_set du fichier conf.php qui définissait le format de sortie).
−
=== Les nombres réels, montants et calculs ===
+
== Les nombres réels, montants et calculs ==
En PHP comme dans d'autres langages (Java par exemple), les données non entières (float, real, double) ne sont pas fiables.
En PHP comme dans d'autres langages (Java par exemple), les données non entières (float, real, double) ne sont pas fiables.
Essayer de faire par exemple
Essayer de faire par exemple
Line 149:
Line 149:
S'il ne s'agit pas d'un prix sur lequel s'adapte les paramètres MU, MT ou MS, il faut utiliser la fonction '''round()'''.
S'il ne s'agit pas d'un prix sur lequel s'adapte les paramètres MU, MT ou MS, il faut utiliser la fonction '''round()'''.
−
=== Création de tables ===
+
== Création de tables ==
Ne pas créer de table à l'utilisation, c'est-à-dire à la '''première utilisation''' du module.
Ne pas créer de table à l'utilisation, c'est-à-dire à la '''première utilisation''' du module.
Si vous créez un module qui utilise des tables qui ne sont pas intégrées en standard dans le code de Dolibarr, veillez à suivre le didacticiel Créer un module qui explique comment joindre des tables qui se créent à l'activation du module et non à son utilisation (voir plus haut).
Si vous créez un module qui utilise des tables qui ne sont pas intégrées en standard dans le code de Dolibarr, veillez à suivre le didacticiel Créer un module qui explique comment joindre des tables qui se créent à l'activation du module et non à son utilisation (voir plus haut).
−
=== Logs ===
+
== Logs ==
Ajouter des traces dans votre code avec la fonction
Ajouter des traces dans votre code avec la fonction
dolibarr_syslog($yourmessage, LOG_INFO|LOG_DEBUG|LOG_WARNING|LOG_ERR);
dolibarr_syslog($yourmessage, LOG_INFO|LOG_DEBUG|LOG_WARNING|LOG_ERR);
−
=== Répertoires de travail ===
+
== Répertoires de travail ==
Si vous avez besoin de créer un répertoire de travail, dans votre code, faites référence à ce répertoire par
Si vous avez besoin de créer un répertoire de travail, dans votre code, faites référence à ce répertoire par
DOL_DATA_ROOT.'/monmodule'.
DOL_DATA_ROOT.'/monmodule'.
Line 168:
Line 168:
Si vous avez besoin d'un répertoire qui contiendra des données temporaires, ce répertoire doit être DOL_DATA_ROOT.'/monmodule/temp'
Si vous avez besoin d'un répertoire qui contiendra des données temporaires, ce répertoire doit être DOL_DATA_ROOT.'/monmodule/temp'
−
== Programmation Objet ==
+
= Programmation Objet =
−
=== Motifs d'organisation du code: ===
+
== Motifs d'organisation du code: ==
[[wikipedia:Martin Fowler|Martin Fowler]] a identifié 3 méthodes d'organisation du code appelées '''motifs''':
[[wikipedia:Martin Fowler|Martin Fowler]] a identifié 3 méthodes d'organisation du code appelées '''motifs''':
Line 184:
Line 184:
Comme le montre les squelettes de code (voir point précédent), Dolibarr se base sur le principe du '''Table Module'''.
Comme le montre les squelettes de code (voir point précédent), Dolibarr se base sur le principe du '''Table Module'''.
−
=== Communication Logique métier - Données (ORM): ===
+
== Communication Logique métier - Données (ORM): ==
Il existe 3 modes de liaisons:
Il existe 3 modes de liaisons: