Comment utiliser un filtre contextuel de vues OU?

18

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

Cet article mentionne un piratage PHP et cet article contient des liens vers un problème indiquant un récent changement dans les 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?

uwe
la source
Je ne pense pas qu'il existe une meilleure solution pour l'instant. Comme indiqué dans les discussions que vous avez signalées, il s'agit apparemment d'un problème permanent. J'ai trébuché sur le même problème cette semaine et j'ai dû trouver une solution de contournement avec des pièces jointes. Mais alors, il ne donne pas une liste mixte mais deux listes connectées, ce qui ne correspond pas à tous les besoins.
Countzero

Réponses:

7

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 OU arg2 OU ...)), j'ai dû déplacer le "Contenu: Publié (Oui)" dans un nouveau groupe de filtres (à l'aide de la boîte de dialogue "And / Or, 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 y est passé, hook_views_query_alter()il s'est déplacé du groupe 0 au groupe 1, ce qui fait que le code des fonctions ci-dessus ne l'affecte plus.

coredumperror
la source
1
Il vaut mieux paraphraser au moins la pertinence des références à la question du PO. Les réponses de lien uniquement sont déconseillées car les liens peuvent ne pas persister.
Triskelion
@Triskelion: Ah, vous avez absolument raison. J'ai modifié ma réponse pour corriger cela.
coredumperror
4

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

Sinan Erdem
la source
Je veux créer une vue avec le contenu de "l'utilisateur actuel" + "Le contenu des utilisateurs marqués (l'utilisateur actuel a signalé l'utilisation de l'indicateur de suivi [utilisateur])"
Umair
2

La situation avec les filtres contextuels et les groupes de filtres est en effet sombre. Voici le fil sur Do à 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 ... Vues Harmonizer de filtre

doublejosh
la source