Comment mettre à jour par programme les valeurs autorisées d'un champ de liste?

10

J'ai créé une liste de sélection pour un compte Profile2 dans Drupal 7. Dans la liste des valeurs autorisées, j'ai ajouté quelques valeurs. Maintenant, ce que je voudrais faire, c'est mettre à jour par programme les valeurs de cette liste (ajouter, supprimer ou mettre à jour). Je ne veux pas utiliser form_alter car je veux que ces mises à jour soient validées dans la base de données. Mon problème est que je n'arrive pas à trouver où ces valeurs sont stockées dans la base de données ou comment extraire ces valeurs de Profile2, les mettre à jour puis les enregistrer.

J'ai googlé haut et bas sur ce problème particulier et je ne trouve pas de réponse sur la façon de le faire. J'espère que quelqu'un pourra m'aider.

Merci.

user5013
la source

Réponses:

23

Quelque chose dans le sens de ...

// Get the field info
$info = field_info_field('field_some_field');

// Get a reference to the values
$values = &$info['settings']['allowed_values'];

// Manipulate the values in some way, e.g.
$values['new_value'] = 'New Value';

// Save the field
field_update_field($info);
Clive
la source
où dois-je ajouter ce morceau de code?
Shivam
@shivam Vous devez ajouter ce code à un module personnalisé que vous créez.
user5013
Mettez-le dans un hook_update_N pour ne l'exécuter qu'une seule fois.
Achraf JEDAY
De plus, cela ne changera pas les anciennes valeurs autorisées si le champ est déjà utilisé.
Achraf JEDAY
3

Vous feriez mieux d'utiliser le allowed_values_functionavec un rappel:

'settings' => array(
  'allowed_values' => array(),
  'allowed_values_function' => '_my_feature_module_options_list',
),

Voir Création d'options de valeurs autorisées dynamiques pour un champ d'entité .

mpp
la source
Une réponse plus complète serait utile. Le code auquel vous faites référence est bon et fonctionne de manière similaire à la réponse acceptée, mais a été créé pour être utilisé avec le module Fonctionnalités.
Johnathan Elmore