Bienvenue, Invité
Nom d'utilisateur : Mot de passe : Se souvenir de moi

SUJET : ModuleBuilder Utiliser dictionnaire dans un champ

ModuleBuilder Utiliser dictionnaire dans un champ il y a 7 mois 20 heures #108230

  • Expresion
  • Portrait de Expresion
  • Hors ligne
  • Fresh Boarder
  • Messages : 2
  • Karma: 0
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
L'administrateur a désactivé l'accès en écriture pour le public.

ModuleBuilder Utiliser dictionnaire dans un champ il y a 3 mois 2 jours #112813

  • egroult
  • Portrait de egroult
  • Hors ligne
  • Expert Boarder
  • Messages : 110
  • Remerciements reçus 26
  • Karma: 3
@Expression : je ne sais si tu as trouvé la solution mais je suis preneur de l'information.
L'administrateur a désactivé l'accès en écriture pour le public.

ModuleBuilder Utiliser dictionnaire dans un champ il y a 1 mois 3 semaines #114297

  • droubaud
  • Portrait de droubaud
  • Hors ligne
  • Fresh Boarder
  • Messages : 16
  • Remerciements reçus 1
  • Karma: 0
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 = $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.
Dernière édition: il y a 1 mois 3 semaines par droubaud.
L'administrateur a désactivé l'accès en écriture pour le public.

ModuleBuilder Utiliser dictionnaire dans un champ il y a 1 mois 2 semaines #114684

  • egroult
  • Portrait de egroult
  • Hors ligne
  • Expert Boarder
  • Messages : 110
  • Remerciements reçus 26
  • Karma: 3
@droubaud : merci du retour.

Il faut que l'on aille demander à @eldy.
L'administrateur a désactivé l'accès en écriture pour le public.

ModuleBuilder Utiliser dictionnaire dans un champ il y a 1 semaine 1 jour #116369

  • TheRed Games
  • Portrait de TheRed Games
  • Hors ligne
  • Fresh Boarder
  • Messages : 4
  • Karma: 0
Très intéressant !

Mais comment faire par exemple si l'on souhaite mettre une checkBox avec tous les champs du dictionnaire ??
L'administrateur a désactivé l'accès en écriture pour le public.