Drupal 7: Relacionar nodos en un bloque basado en sus términos de taxonomía con Views

Buenas drupaleros, hace unos días se me planteo esto para un proyecto y me pareció bastante interesante compartir con vosotros como decidimos solucionarlo.

Problema:

Necesitábamos relacionar nodos que tuvieran las mismas categorías (Taxonomías) en común. es decir que si entrábamos en un nodo con una categoría x1,x2 y x3, nos mostrara un bloque con nodos que tuvieran por lo menos una de esas categorías.

Solución:

El planteamiento inicial fue el de crear un modulo personalizado para poder realizar estas consultas pero tras mucho romperme la cabeza y buscar por internet, encontré varios comentarios que hacían referencia a esta solución:

Paso1:

Creamos con views un bloque de nodos y añadimos los campos que deseamos mostrar.

Paso2:

Hacemos click en Add dentro de CONTEXTUAL FILTER para añadir un contextual filter.

Paso3:

Ponemos lo siguiente en el buscador: “has taxonomy term id” y si todo esta bien os tendría que salir una lista como la de la imagen de abajo.

En este caso seleccionaremos “Content: Has taxonomy term ID (with depth)”  pero esto puede variar dependiendo de las caracteristicas del proyecto.

En caso de usar traduccion en las taxonomias tendreis que usar las variantes "translated"

El with depth, es simplemente para poder seleccionar diferentes niveles dentro de las taxonomias.

Paso4:

En la configuración pondremos lo siguiente:

- Depth: 0
- Allow multiple values: TRUE (en el caso que tengáis un campo con varias taxonomías)
- Set the breadcrumb for the term parents: FALSE
- WHEN THE FILTER VALUE IS NOT AVAILABLE
   - Provide default value: Taxonomy term ID from URL
   - Load default filter from term page: FALSE
   - 
Limit terms by vocabulary: TRUE
   - 
Vocabularies: Seleccionáis vuestro vocabulario.
   - Multiple-value handling: Filter to items that share all terms

Paso5:

En nuestro caso no queríamos que apareciera el nodo que este momento estábamos viendo así que lo excluimos volviendo a añadir otro CONTEXTUAL FILTER como hicimos en el paso 2, pero esta vez en el buscador ponemos esto: “Content: Nid”

Paso6:

En la configuración de este contextual filter realizaremos lo siguiente:

- WHEN THE FILTER VALUE IS NOT AVAILABLE
   - 
Provide default value: Content ID from URL
- Al final de la pagina de configuración le daremos a MORE
   - Allow multiple values: FALSE
   - 
Exclude: TRUE

Paso7:

Guardamos nuestro nuevo bloque, lo colocamos en la pagina que deseemos y a disfrutar de la magia de views.

Explicación:

Views no es el mejor modulo de drupal porque si ni se metió en el core de drupal 8 porque si y ni este modulo hace que drupal marque la diferencia la diferencia con otros CMS porque si.

Views tiene sin fin de combinaciones y posibilidades y entre todas ella siempre hay alguna que nos sorprende mas que otras.

En este caso como habéis podido comprobar añadiendo un “simple” contextual filter no ha ahorrado decenas de horas de programación.

Pero vayamos a ver que acabamos de hacer. Al añadir este contextual filter lo que hemos hecho es añadirle un condicional el cual para que un resultado sea valido, este tiene que tener como un campo con una referencia a la taxonomía que hemos seleccionado previamente.

Si lo encuentra verifica que las taxonomías en ese campo tengan como mínimo una coincidencia con las del campo del nodo que se esta cargando en este momento.

Y volia con algo de magia acabamos de crear un pequeño bloque relacionando taxonomías!

Total de votos: 76

Entradas relacionadas

Comentarios (0)

Deja un comentario