web-dev-qa-db-fra.com

Ajout d'une option «toute» à un filtre exposé des vues

J'ai un filtre exposé des vues, qui permettent de sélectionner plusieurs éléments. Il est basé sur les "valeurs autorisées" pour un champ multiselect CCK.

Le filtre exposé ressemble à ceci:

Option 1
Option 2
Option 3

J'ai besoin d'ajouter une option "TOUT" au sommet, afin que ce soit:

All
Option 1
Option 2
Option 3

En cliquant sur la totalité de l'option, il convient d'avoir le même effet que de détenir CTRL et de cliquer sur Options 1, 2 et 3. C'est-à-dire. Renvoie tous les nœuds qui ont une valeur d'option 1, option 2 ou option 3 pour ce champ.

Comment puis-je ajouter une telle option à mon widget? Je suis sûr que cela pourrait être fait par Form_alter d'une manière ou d'une autre, mais je ne peux pas affiner comment.

5
Tom Kirkpatrick

Vous pouvez simplement ajouter le même filtre non exposé avec vos options:

Option 1
Option 2
Option 3

Ensuite, "toutes" l'option dans le filtre exposé indiquera des résultats uniquement pour ces trois options.

2
yarroha

Dans mon cas (vues filtre exposé des termes de taxonomie), j'ai dû désélectionner toutes les options afin de pouvoir obtenir. Je ne sais pas pourquoi ça marche de cette façon pour moi.

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

Je pense que vous ne pouvez pas le faire par défaut, cependant, vous pouvez utiliser un module créé spécifiquement pour améliorer les filtres exposés. On l'appelle de meilleurs filtres exposés .

1
F1234k

Lorsqu'un filtre exposé est désigné comme multiple et non-facultatif, la sélection de tout ou aucune des options ne donne les mêmes résultats. Une option serait de mentionner que dans le filtre Aide Text. Une autre option consiste à installer de meilleurs filtres exposés et à activer la liaison Sélectionner tout/aucun qui, tout en modifiant la fonctionnalité du filtre, donnera à vos utilisateurs une interface plus intuitive.

1
mikeker

Tom Kirkpatrick était correct, cependant, au lieu d'ajouter toutes les options, vous pouvez également supprimer toutes les options afin que la valeur de l'état du formulaire soit vide. Cela affiche également toutes les valeurs par défaut et est un peu plus propre:

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) { 
  $myfield_values = $form_state->getValue('myfield');
  if (!empty($myfield_values) && isset($myfield_values['-ALL-'])) {
    $form_state->set('myfield', []);
    $form_state->setValue('myfield', []);
  }
}
1
user33560

Au moins pour Drupal= 8 (je ne sais pas si elle s'applique également à D7 également), de meilleurs filtres exposés vous permettent de "ajouter sélectionner tout ou non/aucun link" à votre filtre exposé. BEF Version que j'utilise: 8.x-3.0

Pour ajouter cette option à votre filtre exposé, accédez à votre vue, accédez au panneau avancé> Filtres de qualité supérieure> Paramètres et sous chaque filtre exposé, vous trouverez une panne-pan carnelle effondrée "Plus d'options pour" [Nom de champ] "(Étiquette de filtre:" [ÉTIQUETER]")".

Sélectionnez la case à cocher intitulée "Ajouter un" Sélectionnez tout/None "à:

"Ajoutez un lien" Sélectionner tout/aucun "lorsque vous rendant le filtre exposé à l'aide des cases à cocher. Si cette option est désactivée, modifiez le filtre et vérifiez" Autoriser plusieurs sélections "."

! Le problème que j'ai remarqué avec cette option "TOUT" sélectionnée est qu'il conserve actuellement la page lorsque le formulaire est soumis automatiquement. Mais, si vous n'avez pas besoin de cette fonctionnalité, semble fonctionner comme un charme .

0
ElaAle