drupal 7 – ¿Cómo puedo eliminar elementos de la lista de valores permitidos de un campo de selección que tiene datos para los valores?

Pregunta:

He creado un tipo de contenido que tiene un campo de opción de lista / selección y he introducido los pares clave | valor según sea necesario para que funcione la lista de selección.

Se ingresaron los datos y se decidió que ciertos términos ya no se aplican y que deben eliminarse.

Sin embargo, al intentar eliminar dichos términos, aparece el siguiente error:

Allowed values list: some values are being removed while currently in use.

Evidentemente, en la vida de un proyecto, los valores van a cambiar. ¿Cuál es una forma práctica de eliminar elementos una vez que los nodos están asociados con los términos enumerados?

Esto es lo más parecido que pude encontrar:

https://drupal.org/node/1653012

Hace referencia a un complemento d6 y algunos trucos de parches a los que preferiría no tener que recurrir. Si tuviera que recurrir en última instancia al uso del parche para eliminar la verificación de validación en ese campo, ¿hay algún daño en dejar esos elementos huérfanos en los nodos con los que estaban asociados?

Actualización, me encontré con este problema nuevamente con un cliente del gobierno que, durante los últimos 7 años de tener un sitio Drupal, ha tenido 50 estados y territorios en una lista de selección. Ahora, la política ha cambiado y ya no es necesario incluir los territorios. Poder eliminar elementos de las listas seleccionadas es importante y, por lo tanto, estoy ofreciendo una recompensa.

Estoy buscando una solución segura para poder eliminar elementos de una lista seleccionada. Lo que no sé es si esa solución debería actualizar alguno de los nodos, ya que no estoy seguro de cómo se almacenan los valores de campo en relación con el contenido total de un nodo.

Estoy contento con una solución SQL pura para ejecutar en MySQL; o estoy buscando un módulo.

Respuesta:

Hice algo como esto recientemente con el siguiente enfoque.

  1. Agregue los nuevos valores permitidos.
  2. Agregue un ajuste para configurar valores "activos".
  3. Filtre los valores "inactivos" de la visualización en el formulario.

p.ej:

/**
 * Admin settings form
 */
function MODULE_admin_settings(){

  $form = array();

  // Select active preferences for display
  $field = field_info_field('field_preferences');
  $preferences = list_allowed_values($field);
  $form['field_preferences_active'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Active preferences'),
    '#options' => $preferences,
    '#description' => t('Select the preferences available for user selection.'),
    '#default_value' => variable_get('field_preferences_active', array()),
  );

  return system_settings_form($form);

}

/**
 * Implements hook_field_attach_form
 */
function MODULE_field_attach_form($entity_type, $entity, &$form, &$form_state, $langcode) {

  // Filter out inactive preferences
  if(isset($form['field_preferences'])){
    $preferences = variable_get('field_preferences_active', array());
    foreach($preferences as $key => $preference){
      // If this preference isn't checked, but is set in the field values, unset it.
      if(empty($preference) && isset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key])){
        unset($form['field_preferences'][LANGUAGE_NONE]['#options'][$key]);
      }
    }
  }

}

De esta manera, los datos heredados se conservan como referencia, el formulario se valida y la integridad de los datos permanece intacta.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım