¿Cómo usar un filtro contextual de vistas O?


18

Después de navegar por la red y SE por un tiempo, me parece que no hay una buena solución para combinar 2 contextual filterscon OR (en lugar del AND predeterminado).

Esta publicación menciona un hack de PHP y esta publicación tiene algunos enlaces a un problema que indica un cambio reciente en las vistas 7.x-3.1 . También menciona usar hook_views_query_alter(&$view, &$query)para modificar la vista.

¿Alguien tiene un ejemplo de trabajo o una mejor solución?


No creo que haya una solución mejor a partir de ahora. Como se dijo en los hilos que señaló, aparentemente es un problema continuo. Me encontré con el mismo problema esta semana y tuve que encontrar una solución alternativa con los archivos adjuntos. Pero entonces, no da una lista mixta sino dos conectadas, que no se ajusta a todas las necesidades.
Countzero

Respuestas:



7

El hilo de comentarios que comienza aquí describe una solución efectiva. MotoTribe estaba vinculado al mismo hilo, pero en el momento de su pregunta, no había ningún ejemplo que funcionara en esa página. Ahora hay, como sigue:

En su módulo, implemente hook_views_api():

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

Luego agregue un nuevo archivo a su módulo llamado MODULENAME.views.inc e implemente hook_views_query_alter():

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

También tenga en cuenta esta advertencia:

Aparentemente, el filtro "Contenido: publicado (Sí)" que viene con cada vista se considera parte del mismo grupo de filtros que los filtros contextuales (grupo 0). Entonces, para que mi vista muestre solo nodos publicados que pertenecen a cualquiera de los grupos especificados por filtros contextuales (publicado AND (arg1 OR arg2 OR ...)), tuve que mover el "Contenido: Publicado (Sí)" a un nuevo grupo de filtros (usando el diálogo "Y / O, Reorganizar"). Tenga en cuenta que la interfaz de usuario no mostró el filtro "Contenido: publicado (sí)" de manera diferente después de que lo moví a un nuevo grupo (no había ningún otro grupo), pero en el objeto de consulta que se pasó hook_views_query_alter()se movió desde el grupo 0 al grupo 1, lo que hace que el código en las funciones anteriores ya no lo afecte.


1
Es mejor al menos parafrasear la relevancia de las referencias a la pregunta del OP. Se desaconsejan las respuestas de solo enlace porque los enlaces pueden no persistir.
Triskelion

@Triskelion: Ah, tienes toda la razón. He editado mi respuesta para arreglar eso.
coredumperror

4

Hay un módulo que cambia los manejadores de Vistas para hacer filtros contextuales para usar con OR en lugar de AND: Vistas Filtros contextuales OR


Quiero crear una vista con contenido del "usuario actual" + "Contenido de los usuarios marcados (el usuario actual ha marcado usando la marca de seguimiento [usuario])"
Umair

2

La situación con los filtros contextuales y los grupos de filtros es realmente sombría. Aquí hay un hilo en Do sobre este tema principal, que tiene la misma solución que lo indicado por @CoreDumpError.

https://drupal.org/node/1451218

Además, aquí hay un módulo que puede ayudar a resolver filtros contextuales y expuestos conflictivos ... Vistas Filter Harmonizer

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.