web-dev-qa-db-fra.com

Comment ajouter des listes déroulantes dans le module Critères de filtre dans les vues?

J'étais à une réunion locale de groupe Drupal la semaine dernière où un membre a parcouru une présentation du module Vues. J'étais vraiment excité quand j'ai vu qu'il était capable d'ajouter des listes déroulantes aux critères de filtrage qui il utilisait car j'avais besoin exactement de cette fonctionnalité pour quelque chose que je construis.

Le truc, c'est que je ne trouve pas du tout les paramètres dans ma version. Je me souviens qu'il y avait un lien "paramètres" au bas de sa zone de critères de filtrage, mais je n'ai rien de tel.

Quelqu'un pourrait-il expliquer où je peux trouver cela? Suis-je absent et module supplémentaire?

5
Martin Duys

Les filtres dans les vues et la façon dont ils sont exposés à l'utilisateur réagissent un peu différemment selon le type de filtre utilisé. Le type de filtre utilisé est contrôlé en définissant les données à afficher à l'aide de hook_views_data et hook_views_data_alter. C'est un peu de code et pas toujours quelque chose dont vous avez besoin pour faire vous-même, car de nombreux modules, y compris les vues, en font beaucoup pour vous.

Deux filtres couramment utilisés sont

  • views_handler_filter_in_operator
  • views_handler_filter_string

Les deux sont fondamentalement différents car leurs hypothèses et exigences sont très différentes.

Le premier est celui que vous souhaitez utiliser. Il est utilisé lorsque vous stockez une valeur qui a une liste définie de valeurs possibles. Un exemple pourrait être les types de contenu qui est l'exemple utilisé par @Danielle dans son message. Étant donné que les nœuds ne peuvent pas avoir de valeur aléatoire pour leur type de contenu, il est possible que les vues affichent une liste de cases à cocher dans l'interface d'administration lors de l'utilisation de ce filtre et une liste de sélection/liste de sélection multiple pour l'utilisateur lorsqu'il est exposé.

Le second est utilisé lorsqu'une chaîne est stockée dans la base de données. En utilisant des nœuds comme exemple, le champ de titre serait un bon candidat pour un tel filtre. Étant donné que les titres peuvent être n'importe quel texte, il n'est pas logique d'exposer la sélection de titre d'un nœud sous forme de cases à cocher ou de listes de sélection, mais vous obtenez à la place d'autres options comme celles que vous voyez dans votre vue. Vous pouvez filtrer si la chaîne contient un mot (début/fin/quelque part), sa longueur, etc.

Si celui qui a fait l'intégration des vues n'a pas pris la peine d'utiliser le in_operator type de filtre, et décrivez aux vues (en utilisant une fonction php) les options disponibles, vous devrez le faire en utilisant hook_views_data_alter.

Ce que vous devez faire, c'est:

  1. Créez une sous-classe de views_handler_filter_in_operator
  2. Mettre en place get_value_options
  3. Racontez des vues sur votre nouveau gestionnaire.

Dans le code, cela ressemblerait à ceci

/**
 * Define my custom in_opeator
 */
class my_custom_in_operator extends views_handler_filter_in_operator {
  // overwrite the get_value_options function.
  function get_value_options() {
    if (isset($this->value_options)) {
      return;
    }
    $this->value_options array('option_1' => t('Option 1'), 'option_2' => t('Option 2'));
  }
}

/**
 * Implements hook_views_data_alter().
 */
function my_custom_views_data_alter(&$data) {
  $data['entity_type']['property']['filter']['handler'] = 'my_custom_in_operator';
}

Et tu as fini. En réalité, c'est en fait assez simple. Mais savoir comment faire n'est pas comme les vues sont assez complexes.

10
googletorp

Autorisez-vous plusieurs valeurs dans votre filtre exposé? Si c'est le cas, les sélections apparaîtront dans une boîte de sélection avec une barre de défilement par défaut. Si vous ne forcez qu'une seule sélection, votre filtre exposé apparaîtra par défaut dans une liste déroulante. J'espère que ça aide!

5
Danielle