Ajout d'attributs à partir de module builder

Bonjour à tous,
je débute en dev sur Dolibarr mais pas en dev tout court…
Je me fais un petit module et j’aimerai pouvoir, afin de le déployer facilement, ajouter des attributs (des nouveaux champs dans 2 tables) directement dedans.
Pour le moment, j’ai créer les attribut à la main à partir de la configuration des modules et le code associé fonctionne parfaitement.
Je n’ai pas encore les bonne habitudes pour faire les recherches correctement (mot clé propre à dolibarr), désolé si cette question a déjà été posée.
D’avance merci.

Bonjour
J’avais le même besoin et je ne sais pas si c’est la meilleure méthode (car je suis aussi mi-débutante Dolibarr, pas en dév), mais je créé mes extrafields dans la méthode init() du module personnalisé, un peu comme ça :

$pos = 1;
$params = array(
	'attrname'       => 'monmodule_nomextrafield',
	'label'          => 'Mon champ',
	'type'           => 'varchar', // boolean, select, checkbox, phone,...
	'pos'            => $pos,
	'size'           => '255',
	'elementtype'    => 'societe', // socpeople, adherent, product, commande, facture,...
	'unique'         => 0,
	'required'       => 0,
	'default_value'  => '',
	//'param'          => array( 'options' => array() ), // pour les listes
	'alwayseditable' => 1, // 1|0
	'perms'          => '',
	'list'           => '1', // 1 - 5
	'help'           => 'Infobulle d’aide',
	//'computed'       => '', // pour les champs calculés
	'entity'         => $conf->entity,
	'langfile'       => $this->langfiles[0],
	'enabled'        => '$conf->monmodule->enabled',
	'totalizable'    => 0,
	'printable'      => 1, // 0 - 2 (object) | 0 - 5 (line)
);
include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
$extrafields = new ExtraFields( $this->db );
$extrafields->addExtraField( $params );

Sauf que je ne sais plus pourquoi, j’ai utilisé call_user_func_array.
La classe des extrafields est dans htdocs/core/class/extrafields.class.php.

Le champ est créé lors de l’activation du module. S’il existe déjà (attrname), il n’est pas créé, et je crois même que ça génère une entrée dans les logs, mais je n’ai pas trouvé comme tester rapidement s’il existe, pour pouvoir aussi le mettre à jour en cas de modifs (je n’ai pas beaucoup cherché!).

Bonne soirée

1 « J'aime »

Merci Nat je vais tester ça.
Ca semble faire le job à la lecture.
Il faudrait que je regarde le code d’autre modules, on verra plus tard :wink:

Finalement j’ai trouvé grâce à toi @nat . dans la class du module et la procedure init, j’ai trouvé ce code :

// Create extrafields during init

include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
$extrafields = new ExtraFields($this->db);
$result1=$extrafields->addExtraField('module_myattr1', New Attr 1 label, 'boolean', 1,  3, 'thirdparty',   0, 0, '', '', 1, '', 0, 0, '', '', 'module@module', 'isModEnabled(module)');
$result2=$extrafields->addExtraField('module_myattr2', New Attr 2 label, 'varchar', 1, 10, 'project',      0, 0, '', '', 1, '', 0, 0, '', '', 'module@module', 'isModEnabled(module)');

Faut juste trouver les correspondance de variables :wink: