¿Cómo actualizar mediante programación los valores permitidos de un campo de lista?


10

He creado una lista de selección para una cuenta de Profile2 en Drupal 7. En la lista de valores permitidos, he agregado algunos valores. Ahora, lo que me gustaría hacer es actualizar mediante programación los valores de esa lista (agregar, eliminar o actualizar). No quiero usar form_alter porque quiero que estas actualizaciones se confirmen en la base de datos. Mi problema es que parece que no puedo encontrar dónde se almacenan estos valores en la base de datos o cómo extraer esos valores de Profile2, actualizarlos y luego guardarlos.

He buscado en Google alto y bajo en este tema en particular y no puedo encontrar una respuesta sobre cómo hacerlo. Espero que alguien me pueda ayudar.

Gracias.

Respuestas:


23

Algo en la línea 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);

donde necesito agregar esta pieza de código?
Shivam

@shivam Debe agregar este código a un módulo personalizado que cree.
user5013

Ponga esto en un hook_update_N para que se ejecute solo una vez.
Achraf JEDAY

Además, esto no cambiará los valores permitidos antiguos si el campo ya está en uso.
Achraf JEDAY

3

Será mejor que use el allowed_values_functioncon una devolución de llamada:

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

Consulte Crear opciones dinámicas de valores permitidos para un campo de entidad .


Una respuesta más completa sería útil. El código al que hace referencia es bueno y funciona de manera similar a la respuesta aceptada, pero fue creado para usarse con el módulo Características.
Johnathan Elmore
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.