Volver al Blog

Cómo Eliminar Duplicados en Vistas de Drupal con Relaciones de Taxonomía

2023-08-102 min de lectura

Cuando trabajamos con Drupal, una de las herramientas más potentes a nuestra disposición es Vistas. Ofrece una forma flexible de presentar contenido, especialmente cuando el contenido está asociado con taxonomías. Sin embargo, a veces nos encontramos con un problema molesto: los duplicados. Yo personalmente me enfrenté a este desafío hoy.

El Problema:
Creé una Vista de Drupal llamada 'recursos'. En esta vista, muestro elementos junto con sus términos de taxonomía asociados, gracias a las relaciones que he establecido. También he habilitado filtros de taxonomía expuestos, lo que permite a los usuarios filtrar fácilmente el contenido. Sin embargo, noté un problema: algunos elementos aparecen varias veces porque están vinculados a varios términos de taxonomía.

Probé las opciones "Distinto" y "Agregar" en Vistas de Drupal, esperando una solución rápida. Sin embargo, no resolvieron el problema. Así que, después de investigar un poco, encontré una solución que funcionó, la cual compartiré a continuación.

Cómo Solucionarlo:

  1. Añadir un Identificador Único a Cada Elemento:
    Primero, ve a tu vista 'recursos' en Drupal. Añade el campo Contenido: id a la vista.
  2. Modificar la Consulta de la Vista:
    Implementa un hook personalizado para modificar la consulta de la vista. Esto asegurará que los resultados se agrupen por el ID único del contenido.
/**
 * Implementa hook_views_query_alter().
 */
function my_module_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
  // Dirigirse a la vista 'resources'.
  if ($view->id() == 'resources') {
    // Añadir el campo nid con una función groupby.
    $query->addField('node_field_data', 'nid', '', ['function' => 'groupby']);
    // Agrupar resultados por ID de nodo.
    $query->addGroupBy('node_field_data.nid');
  }
}

En Palabras Sencillas:
Lo que estamos haciendo aquí es simple. Le decimos a Drupal que mire cada entrada en nuestra vista y las agrupe por su ID de contenido único. De esta manera, incluso si una pieza de contenido está relacionada con varios términos de taxonomía y normalmente aparecería más de una vez, ahora solo se mostrará una vez.

¡Feliz depuración!

Categorías: