Salut Kusco,
Avant tout je précise que je ne suis pas un expert Dolibarr et qu’il est possible qu’il y a une manière plus élégante ou plus correcte de faire cela. En attendant ça produit le résultat voulu chez moi.
Dans le module Builder, dans ton objet tu trouve le fichier qui s’intitule MYOBJECT.class.php où MYOBJET est le nom que tu as donné à ton objet. C’est ce fichier qu’il faut modifier, soit avec l’éditeur intégré au modulebuilder ou directement si tu as un accès direct.
Tu devras ajouter deux nouvelles fonctions dans ce fichier. Ajoute les après a la fonction « doSheduledJob() {… } »
Avant cela en début de fichier, là où se trouvent les lignes qui commentcent par include_once (…); tu ajoute la ligne suivante qui permettra d’utiliser la classe formOther
require_once DOL_DOCUMENT_ROOT.‹ /core/class/html.formother.class.php ›;
Voici ces deux fonctions
// la fonction output va être apellée pour chaque champ de l'object si le champ doit juste être affiché.
/**
* Return HTML string to show a field into a page
* Code very similar with showOutputField of extra fields
*/
public function showOutputField($val, $key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = '')
{
global $object, $db, $langs;
// ici on apelle la focntion d'origine de dolibar pour tous les champs de ton objet
$ret = parent::showOutputField($val, $key, $value, $moreparam, $keysuffix, $keyprefix, $morecss);
Nous inspectons si le champ traité est celui que l'on souhaite modifier
if ($key == "leNomDuChampAModifier") {
// le code qui va produire ce qui sera affiché pour ton champ que tu stockes dans une variable $ret. dans mon a cas je fais appel à la focntion de tradcution, car j'ai mis en plac des traductions pour mon dictionnaire.
$ret = $langs->trans("c_mondictionaire".$value);
}
// On retourne tout ça à l'apellant
return $ret;
}
/**
* Return HTML string to put an input field into a page
* Code very similar with showInputField of extra fields
*/
public function showInputField($val, $key, $value, $moreparam = '', $keysuffix = '', $keyprefix = '', $morecss = 0, $nonewbutton = 0)
{
global $object, $db;
// on apelle la focntion d'origine pour tous les champs
$ret = parent::showInputField($val, $key, $value, $moreparam, $keysuffix, $keyprefix, $morecss = 0, $nonewbutton = 0);
if ($key == "leNomDuChampAModifier") {
// on instancie un objet de la classe formOther
$formother = new FormOther($db);
// on apelle la method select_dictionary qui nous retourne une select box
$ret = $formother->select_dictionary($key, 'c_'.$key, "code", "label", $value);
}
// on retourne ça à l'apellant
return $ret;
}
pour plus de detail sur ces deux fonctions, tu retrouveras leur version d’origne dans le fichier core/class/commonobject.class.php.
Voilà, j’espère que cela te permettra d’avancer.
Movix