ModuleBuilder Utiliser dictionnaire dans un champ

Je suis en train de créer un nouveau module avec Module Builder et j’ai besoin d’inclure un dictionnaire dans un champ de formulaire, comment puis-je le faire ?

Je vous remercie

@Expression : je ne sais si tu as trouvé la solution mais je suis preneur de l’information.

Bonjour,

Tout se fait dans la classe de l’objet qui contient le champ. Le module builder vous génère automatiquement un attribut $field, qui est un tableau décrivant comment les champs de l’objet seront gérés dans le CRUD et dans les listes.

Pour les champs à remplir à partir d’un dictionnaire, la seule solution que j’ai trouvé est de créer tout d’abord une entrée dans fields, obligatoirement de type interger :
‹ fk_monChamp › => array(‹ type ›=>‹ integer ›,…

'monChamp étant déclaré comme une foreignkey sur un champ de type interger dans la table dictionnaire. Je vais appeler ce champ ‹ code › dans l’exemple qui suit.

Ensuite; il faut ajouter à ‹ fk_monChamp › une entrée ‹ arrayofkeyval › avec toutes les valeurs de la table dictionnaire, ce qui peut se faire dans le constructeur. Exemple :
$sql = « SELECT c.code, c.label, c.active »;
$sql.= " FROM ".MAIN_DB_PREFIX.« c_monDictionnaire as c »;
$sql.= " WHERE c.active = 1 « ;
$sql.= " ORDER BY c.label ASC »;
$resql = $db->query($sql);
if ($resql)
{
$num = $db->num_rows($resql);
if ($num > 0)
{
$arrayofkeyval = array();
$i = 0;
while ($i < $num)
{
$obj = $db->fetch_object($resql);
$arrayofkeyval[$obj->code] = $obj->label;
$i = $i +1;
}
$this->fields[‹ fk_monChamp ›][‹ arrayofkeyval ›] = $arrayofkeyval;
}
$db->free($resql);
}
else
{
dol_print_error($db);
}

Ca fonctionne parfaitement dans le CRUD si on utilise le _card.php généré par le module builder (on a une jolie Combobox avec les entrées du dictionnaire). Dans le champ de recherche de la liste, je butte encore sur comment faire apparaître la combo box. Il faut que je farfouille dans les modules exitants pour voir quel paramétrage spécifique dans $fields est à faire.

@droubaud : merci du retour.

Il faut que l’on aille demander à @eldy.

Très intéressant !

Mais comment faire par exemple si l’on souhaite mettre une checkBox avec tous les champs du dictionnaire ??