Module CustomFields FR
This module is not available for Dolibarr Version > 3 . For newer Dolibarr version use the native Extrafields feature, see the related page.
L'article n'a pas encore été entièrement traduit en français.
Veuillez lire le wiki en anglais qui est déjà complet (icône à gauche).
Informations
Module name | |
Editor / Editeur | |
Download or buy page / Page achat ou téléchargement | www.dolistore.com |
Status / Statut / Estado | Stable |
Prerequisites / Prérequis | Dolibarr <= 3.3.* Dolibarr min version 3.2.0 |
Last update date / Date mise à jour fiche / Fecha última actualización | 2022-03-27 |
Note / Nota |
Description
Ce module permet à l'utilisateur de créer et de manipuler facilement des champs personnalisés, et de les utiliser ensuite dans les documents PDF ou ODT, ainsi que dans le code PHP
Vous pouvez choisir le type de données, la taille, le libellé, les valeurs possibles, celle par défaut ainsi que des contraintes (liens vers d'autres tables) ou des requêtes SQL.
Le module CustomFields a été conçu pour vous permettre de :
- créer facilement des champs personnalisés avec le type de données de votre choix
- manipuler/créer/modifier/supprimer des listes de champs personnalisés
- Utiliser facilement ces champs dans vos documents PDF ou ODT, ou dans n'importe quel morceau de code PHP
Ce module a pour philosophie :
- Le respect des standards.
- L'indépendance du code de dolibarr.
- Etre réutilisable.
CustomFields a été conçu dans l'optique d'être le plus portable, souple, modulaire et réutilisable possible, ainsi il pourra être adapté à n'importe quel module Dolibarr, ainsi qu'à (presque) n'importe quel besoin utilisateur (même si ce besoin n'est pas encore codé, vous pourrez probablement simplement créer une requête SQL, le reste sera généré autumatiquement).
Comprendre CustomFields
Techniquement parlant, ce module est une coquille (wrapper) pour la base de données SQL. Il repsecte les standards SQL, et les manipule de façon standardisée.
Ceci signifie que vous pouvez modifier votre base de données avec un outil tel que phpMyAdmin et que ces changements seront reflétés dans le module de la même façon.
Fonctionnalités
- Implémenté nativement dans les modules : Factures, Propales et Produits/Services.
- Totalement multilingue :
- Interface d'Administration (français et anglais pour l'instant, mais peut être traduit dans n'importe quel langue avec les fichier .lang)
- Libellés des champs personnalisés multilingues
- Valeurs des champs personnalisés multilingues (ex: Case à cocher oui/non qui peut être traduite vers n'importe quelle langue, idem pour les énumérations définies par l'utilisateur). Vous pouvez même traduire les valeurs de vos listes déroulantes ou vos champs contraints.
- Plusieurs types de données standards supportés :
- Textbox
- Areabox
- YesNoBox
- TrueFalseBox
- DropdownBox (avec vos propores valeurs)
- Date
- DateTime
- Integer
- Float
- Double
- Contrainte (lien vers d'autres tables)
- Autres (type personnalisé, défini par votre propre requête SQL)
Note : vous pouvez ajouter vos propres types de données SQL, voyez le chapitre adéquat. Le dernier type n'est pas un type de données standard à proprement parler, mais il permet d'utiliser tout type de données SQL qui n'est pas encore implémenté, il sera manipulé du mieux possible par le module (per défaut, il sera affiché comme une TextBox)
- Requêtes SQL personnalisées pour créer des champs complexes : ces requêtes seront exécutées après la création/modification de la définition du champ personnalisé.
- Mise à jour des champs personnalisés automatique par la base de données et par les Triggers.
- utilisable par tout module, qu'il soit natif (core) ou externe (voir le chaiptre correspondant).
- Détection et utilisation des contraintes automatique (recherche de la clé primaire, choix du même type et taille du champ) et gestion automatique de l'impression et de la modification (affichées comme une liste déroulante).
- remplacement des index par les valeurs d'une autre colonne pour les champs avec contraintes : indiquez quelle(s) colonne(s) vous souhaitez voir apparaitre, et le module affichera la colonne associée à la place de l'ID de l'enregistrement (voir le chapitre correspondant)
- possibilité de définir plusieurs champs personnalisés pour chaque module
- utilisation facile dans les templates PDF et ODT (voir le chapitre correspondant).
- Fonctionne sur mobiles et tablettes : pas d'AJAX, pas de javascript, uniquement du HTML standard.
- Présentation élégantes dans les feuilles de calcul.
- Supporte toutes les fonctions classiques des champs standards (création, édtion, duplication, etc.)
- Isolation du code : n'interfère pas avec le fonctionnement normal de Dolibarr, tout est séparé. Vous pouvez simplement supprimer les champs personnalisés, aucune donnée ne sera impactée, pas plus que votre installation de Dolibarr.
- Développez votre propres modules avec CustomFields : CF fournit de nombreuses méthodes de gestion des entrées des utilisateurs ainsi que de manipulation des valeurs depuis n'importe où dans le code (Natif ou vos modules), et même quelques fonctions génériques pour exécuter n'importe quelle requête SQL et vous aider à l'optimiser, avec gestion automatique des erreurs.
- Le code est très simple à modifier/customiser/réutiliser/porter... (Architecture modulaire totalement commentée, et aucune fonction en double).
- Utilisation stricte des standards SQL, garantissant ainsi le bon fonctionnement avec n'importe quelle base de données respectant ces standards (testé avec MySQL, fonctionne probablement avec PostgreSQL et SQLite).
- Sécurisé : seuls les utilisateurs autorisés peuvent éditer les champs personnalisés (ceux qui ont les droits Créer et Modifier pour ce module)
- Optimisé et rapide : utilisation du cache partout ou cela est possible, et requêtes SQL super optimisées. Code PHP rapide, avec aussi peu de boucles que possible.
Pré-requis
Ce module nécessite que votre base de données implémente les clés étrangères pour être totalement fonctionnel - par exemple utilisez InnoDB avec MySQL plutot que MyISAM qui ne supporte pas les clés étrangères et le contrôle d'intégrité référentielle.
Cependant, dans le cas où vous ne pouvez vraiment pas utiliser les clés étrangères dans votre base de données, CustomFields peut toujours fonctionner en mode de compatibilité: vous aurez la plupart des fonctions, dont les contraintes, mais votre base de données sera un peu moins propre.
pour de plus amples informations, référez-vous à la documentation Développeur au sujet du mode de compatibilité SQL.
Utilisation
Traduction du libellé d'un champ
Les champs peuvent être facilement renommé ou traduit dans plusieurs langues en éditant les fichiers de langues.
Ouvrez le fichier /customfields/langs/code_CODE/customfields-user.lang (où code_CODE est le code ISO de votre région, ex: en_US ou fr_FR) et ajoutez dedans le nom de la Variable de votre champ personnalisé (affiché dans le panneau administrateur, colonne Variable) suivi de la traduction (format: cf_monchamp= Mon Libellé).
Ex: disons que votre champ personnalisé est nommé "user_ref", et que le nom de Variable résultat est "cf_user_ref". Dans customfields-user.lang il vous suffit d'ajouter:
cf_user_ref= Le libellé que vous voulez. Vous pouvez même écrire une très très longue phrase ici.<br />Et vous pouvez même insérer des retours à la ligne avec <br />.
Testez vos champs personnalisés avec le module PDFTest
Un module auxiliare appelé CustomFieldsPDFTest est fourni afin que que vous puissiez facilement et rapidement tester vos champs personnalisés dans vos documents PDF. Cela évite d'avoir à faire votre propre modèle PDF juste pour tester et risquer de faire des erreurs de code php.
Il suffit juste d'activer le module CustomFieldsPDFTest dans Accueil>Configuration>Modules et ensuite de générer un fichier PDF en utilisant n'importe quel modèle.
Une page sera rajouté à la fin du fichier PDF généré, contenant une liste extensive de tous les champs personnalisés disponibles ainsi que leurs valeurs, et leurs valeurs brut(=raw) (valeur raw = pas de beautification, pas d'encode html ni de traduction).
Vous pouvez ainsi vérifier qu'un champ personnalisé correspond bien à vos besoins et délivre toutes les informations dont vous aurez besoin dans votre futur modèle PDF.
Quand vous avez fini le test, désactivez simplement le module, vous ferez votre propre modèle PDF (voir ci-dessous)
Note: les documents PDF déjà générés ne seront pas affectés, seulement les documents générés après l'activation du module PDFTest se verront octroyés cette page supplémentaire de champs personnalisés, et après désactivation du module, si vous générez à nouveau le document PDF, les pages supplémentaires disparaîtrons.
Implémentation dans les modèles ODT
Les champs personnalisés sont automatiquement chargés pour les modèles ODT sans opération supplémentaire.
Utilisez juste le nom de la Variable (colonne Variable dans le panneau admin) comme un tag, enclosé de deux accolades.
Ex: pour un champ personnalisé nommé user_ref, vous obtiendrez comme nom de Variable cf_user_ref. Dans votre ODT, pour obtenir la valeur de ce champ, il suffit de faire:
{cf_user_ref}
Vous pouvez également obtenir la valeur brute (sans aucun pré-traitement) en ajoutant le suffixe _raw au nom de variable:
{cf_user_ref_raw}
Il y a également un support complet des champs contraints, ce qui fait que si vous avez une contrainte sur ce champ, les valeurs liées dans la table référencée seront automatiquement récupérées et vous serez en mesure de les utiliser avec de simples tags.
Ex: cf_user_ref est contraint sur la table llx_user:
{cf_user_ref} = rowid {cf_user_ref_firstname} = firstname {cf_user_ref_user_mobile} = mobile phone etc...
Comme vous pouvez le voir, il suffit de rajouter le suffixe '_' et le nom de la colonne sql dont vous voulez obtenir la valeur.
Pour les lignes produits, cela fonctionne de la même façon, il suffit d'écrire le nom de Variable dans la table des lignes produits, entre les tags [!-- BEGIN row.lines --] et [!-- END row.lines --]
Note: un usage intéressant des champs personnalisés est d'utiliser un type Vrai/Faux avec une substitution conditionnelle, ex: avec un champ personnalisé cf_enablethis:
[!-- IF {cf_enablethis_raw} --] Ce texte s'affichera si cf_enablethis est Vrai [!-- ELSE {cf_enablethis_raw} --] Sinon, ce texte ci s'affichera si cf_enablethis est Faux [!-- ENDIF {cf_enablethis_raw} --]
Il est nécessaire d'utiliser la valeur brute, car il est fiable d'avoir une valeur 0/1 pour que la condition fonctionne. Sinon on peut aussi avoir vide/non-vide, ce qui fait que cette technique fonctionne aussi pour les types Text ou tout autre: si le texte est vide, vous pouvez ne rien afficher, par contre si le texte n'est pas vide vous pouvez mettre un préambule et la valeur du champ:
[!-- IF {cf_mytextfield_raw} --] Mon champ texte n'est pas vide, voici sa valeur: {cf_mytextfield} [!-- ENDIF {cf_mytextfield_raw} --]
Implémentation dans les modèles PDF
Pour utiliser vos champs personnalisés dans votre modèle PDF, vous devez tout d'abord charger les données des champs personnalisés, ensuite vous pourrez les utiliser comme bon vous semble.
- Pour charger les champs personnalisés:
Placer le code suivant le plus haut possible dans votre modèle PDF:
// Init and main vars for CustomFields
dol_include_once('/customfields/lib/customfields_aux.lib.php');
// Filling the $object with customfields (you can then access customfields by doing $object->customfields->cf_yourfield)
$this->customfields = customfields_fill_object($object, null, $outputlangs, null, true); // beautified values
$this->customfields_raw = customfields_fill_object($object, null, $outputlangs, 'raw', null); // raw values
$this->customfields_lines = customfields_fill_object_lines($object, null, $outputlangs, null, true); // product lines' values
Note: vous pouvez placer le code au-dessus juste en-dessous de cette ligne dans les modèles PDF:
$pdf=pdf_getInstance($this->format);
- Pour accéder à la valeur du champ personnalisé:
Formattage beautifié:
$object->customfields->cf_myfield
ou pour la valeur brute:
$object->customfields->raw->cf_myfield
- Pour accéder aux champs personnalisés des lignes produits:
$lineid = $object->lines[$i]->rowid;
$object->customfields->lines->$lineid->cf_myfield
Où $lineid doit être remplacé par l'id de la ligne produit que vous voulez récupérer (rowid sql des produits, donc ça ne commence pas forcément par 0 et peut être n'importe quel nombre).
- Pour imprimer le champ dans votre PDF avec FPDF (librairie PDF par défaut):
$pdf->MultiCell(0,3, $object->customfields->cf_myfield, 0, 'L'); // printing the customfield
- Et si vous souhaitez imprimer le libellé en multilangue:
$outputlangs->load('customfields-user@customfields');
$mylabel = $customfields->findLabel("cf_myfield", $outputlangs); // where $outputlangs is the language the PDF should be outputted to
ou si vous souhaitez le faire automatiquement (utile dans une boucle):
$outputlangs->load('customfields-user@customfields');
$keys=array_keys(get_object_vars($object->customfields));
$mylabel = $outputlangs->trans($keys[xxx]); // where xxx is a number, you can iterate foreach($keys as $key) if you prefer
Implémentation en code php (module core Dolibarr ou pour vos propres modules)
Une des fonctionnalités principales du module CustomFields est qu'il offre un moyen générique d'accéder, d'ajouter, de modifier et d'afficher des champs personnalisés depuis votre propre code. Vous pouvez facilement développer votre propre module en utilisant uniquement des champs basés sur la classe CustomFields.
Pour récupérer les valeurs des champs, vous pouvez utiliser la librairie simplificatrice qui facilite beaucoup l'utilisation des champs personnalisés vos codes php:
dol_include_once('/customfields/lib/customfields_aux.lib.php'); // include the simplifier library
$customfields = customfields_fill_object($object, null, $langs); // load the custom fields values inside $object->customfields
Vous pouvez alors facilement accéder aux valeurs des champs personnalisés comme ceci:
print($object->customfields->cf_myfield);
Pour charger les champs personnalisés des lignes produits, vous pouvez utiliser la fonction customfields_fill_object_line():
dol_include_once('/customfields/lib/customfields_aux.lib.php'); // include the simplifier library
$customfields = customfields_fill_object_lines($object, null, $langs); // load the custom fields values inside $object->customfields
Vous pouvez alors accéder aux champs des lignes produits comme ceci:
$object->customfields->lines->$lineid->cf_myfield
Vous pouvez également obtenir (et bien plus) manuellement les valeurs des champs personnalisés en utilisant la classe CustomFields:
// Init and main vars
//include_once(DOL_DOCUMENT_ROOT.'/customfields/class/customfields.class.php'); // OLD WAY
dol_include_once('/customfields/class/customfields.class.php'); // NEW WAY since Dolibarr v3.3
$customfields = new CustomFields($this->db, $currentmodule); // where $currentmodule is the current module, you can replace it by '' if you just want to use printing functions and fetchAny.
//$records = $customfields->fetchAll(); // to fetch all records
$records = $customfields->fetch($id); // to fetch one object's records