Eliminación de resultados duplicados en vistas - Drupal

En algunas ocasiones necesitamos obtener información mediante el módulo Views, pero debido a las limitaciones de este a requerimientos complejos obtenemos la información duplicada, un ejemplo hipotético de esto podría ser la necesidad de obtener términos de un vocabulario relacionados a un tipo de contenido X que se encuentra relacionado a otro tipo de contenido Y.

El módulo Views pone a nuestra disNasional Skateboardsposición la función hook llamada hook_views_pre_render, con la cual nos es posible manipular la salida de las vistas según sea nuestra necesidad en especifico, en concreto este hook recibe como parámetro un array asociativo en el cual se encuentra toda la información de la vista que se esté procesando en su momento, la funciones de los módulos que utilizan este hook serán llamadas en cada ocasión que sea procesada una vista, por lo que es necesario crear una lógica dentro de las mismas con el fin de solo modificar la vista que sea necesaria.

A continuación se encuentra una implementación de este hook:

function remove_duplicate_terms_views_pre_render(&$view){
  $used_tids = array(); // Arreglo de resultados final
  // Validación de vista deseada
  if($view->name =='categorias_wallpapers'){
    // Validación de pantalla o subvista deseada
    if($view->current_display =='default'){
     // Recorro resultados y lleno nuevo arreglo de resultados
     foreach($view->result as $row){
        if (!in_array($row->term_data_tid,$used_tids)){
          $new_view_result[] =$row;
          $used_tids[] =$row->term_data_tid;
        }
      } 
      $view->result =$new_view_result;
    }
  }
}

Inicialmente se valida la vista mediante la propiedad “name”, seguidamente se valida que sea el display que se desea mediante la propiedad “current_display”, con esto no se modificara la salida de todos los display de la vista sino solo uno en especial, seguidamente se recorren los resultados buscando identificadores de termino duplicados, creando un solo arreglo de términos en los cuales no se duplican valores.

Este hook puede ser utilizado según sea la necesidad y la imaginación podrían eliminarse nodos duplicados, agregar información o manipularla. Espero que les sea útil esta guía.

 

Saludos

Max Méndez