drupal 7 – Agregar una opción 'Todo' a un filtro de vistas expuestas

Pregunta:

Tengo un filtro Vistas expuestas, que permite seleccionar varios elementos. Se basa en los 'Valores permitidos' para un campo CCK de selección múltiple.

El filtro expuesto se ve así:

Option 1
Option 2
Option 3

Necesito agregar una opción 'Todos' en la parte superior, para que sea:

All
Option 1
Option 2
Option 3

Hacer clic en la opción Todos debería tener el mismo efecto que mantener presionada la tecla Ctrl y hacer clic en Opciones 1, 2 y 3. es decir. devuelve todos los nodos que tienen un valor de Opción 1, Opción 2 u Opción 3 para este campo.

¿Cómo puedo agregar esa opción a mi widget? Estoy seguro de que podría hacerse a través de form_alter de alguna manera, pero no puedo entender cómo.

Respuesta:

De acuerdo … creo que lo he descifrado.

function mymodule_form_alter(&$form, $form_state, $form_id) { 
  if ($form_state['view']->name == 'myview') {
    // Add our custom All buttons.
    $form['myfield']['#options'] = array("-ALL-" => t("- All -")) + $form['myfield']['#options'];
    array_unshift($form['#submit'], 'mymodule_exposed_form_submit');
  }
}

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  if (!empty($form_state['values']['myfield']['-ALL-'])) {
    $options = $form['myfield']['#options'];
    unset($options['-ALL-']);
    $form_state['values']['myfield'] = $options;
  }
}

Básicamente, agrego mi elemento 'Todo' en la parte superior de la selección. Luego agrego mi propio controlador de envío personalizado antes del de Views.

En mi controlador de envío, verifico la presencia de la opción Todos y, si se encuentra, ajusto las opciones seleccionadas para que se seleccionen todas las opciones excepto la opción Todos.

Parece que funciona 🙂

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım