web-dev-qa-db-fra.com

Comment utiliser un filtre contextuel de vues OU?

Après avoir parcouru le net et SE pendant un certain temps, il me semble qu'il n'y a pas de bonne solution pour combiner 2 contextual filters Avec OR (plutôt que l'ET par défaut)).

Ce post mentionne un hack PHP et ce post a quelques liens vers un problème indiquant un changement récent dans vues 7.x- 3.1 . Il mentionne également l'utilisation de hook_views_query_alter(&$view, &$query) pour modifier la vue.

Quelqu'un at-il un exemple de travail ou une meilleure solution?

17
uwe

Essayez le patch dans ce problème: Extraire la valeur du filtre d'un argument

Il vous permet de passer la valeur du filtre contextuel au "filtre normal". Là, vous pouvez faire vos conditions avancées.

7
mojzis

Le fil de commentaires commençant ici décrit une solution de contournement efficace. MotoTribe lié au même fil, mais au moment de sa question, il n'y avait aucun exemple de travail sur cette page. Maintenant, il y a, comme suit:

Dans votre module, implémentez hook_views_api():

function MODULENAME_views_api() {
  return array(
    'api' => 3,
  );
}

Ajoutez ensuite un nouveau fichier à votre module appelé MODULENAME.views.inc, et implémentez hook_views_query_alter():

function MODULENAME_views_query_alter(&$view, &$query) {
  if ($view->name == 'whatever_your_view_is_called') {
    $query->where[0]['type'] = 'OR';
  }
}

Soyez également conscient de cette mise en garde:

Apparemment, le filtre "Contenu: Publié (Oui)" fourni avec chaque vue est considéré comme faisant partie du même groupe de filtres que les filtres contextuels (groupe 0). Donc, pour que ma vue affiche uniquement les nœuds publiés qui appartiennent à l'un des groupes spécifiés par les filtres contextuels (publié ET (arg1 OR arg2 OR ...)), j'ai dû déplacer le "Contenu: Publié (Oui)" dans un nouveau groupe de filtres (en utilisant le "Et/Ou, Réorganiser" Notez que l'interface utilisateur n'affichait pas le filtre "Contenu: Publié (Oui)" différemment après l'avoir déplacé dans un nouveau groupe (il n'y avait pas d'autres groupes), mais dans l'objet de requête qui est passé dans hook_views_query_alter() il l'a fait passer du groupe 0 au groupe 1, ce qui a empêché le code des fonctions ci-dessus de l'affecter.

7
coredumperror

Il existe un module qui modifie les gestionnaires de vues pour créer des filtres contextuels à utiliser avec OR au lieu de ET: Vues Filtres contextuels O

4
Sinan Erdem

La situation avec les filtres contextuels et les groupes de filtres est en effet sombre. Voici le fil sur D.o à propos de ce toppic, qui a la même solution que celle indiquée par @CoreDumpError.

https://drupal.org/node/1451218

En outre, voici un module qui peut aider à résoudre les filtres contextuels et exposés conflictuels ... Views Filter Harmonizer

2
doublejosh