Más vistas con argumentos en Drupal: jugando con las taxonomías

Una de las grandes ventajas de las vistas con argumentos en Drupal es el juego que te permiten con las taxonomías, de forma bastante simple, podemos hacer que se nos muestre información relacionada con ciertas categorías, y complicándolo un poquito más, podemos realizar cosas como las que pregunta cdp en este comentario:

Quiero hacer una vista que al hacer click sobre un nodo me muestre todos los nodos que tengan los mismos tags que el nodo sobre el que se ha hecho click. He creado el vocabulario, pero por ahora no he conseguido crear una vista que me muestre los nodos comunes a los vídeos. ¿Solucionaría mi problema una vista con argumentos?

Es decir, en una vista de tipo bloque, mostrar todos los nodos que compartan tags con el que estamos visualizando. Esto también se puede hacer con las vistas con argumentos

Nota: Para estos ejemplos he creado varios nodos con ciudades, cada ciudad pertenece a un país y tiene un idioma, ambas características marcadas por la taxonomía.

ejemplo simple

En este ejemplo, se muestra cómo hacer una vista con argumentos para que muestre los nodos pertenecientes a la taxonomía que se le pasa por parámetro.

un poco más complejo

Complicándolo un poquito más, podemos hacer una vista de tipo bloque que, a partir del nodo actual, muestre todos aquellos con los que comparta taxonomía.
Modificar las vistas de esta forma requiere algunos conocimientos de PHP.

Utilizaremos este código como "Argument Handling Code", del que podés encontrar más información en el handbook de drupal

<?php
// Utilizamos arg(1) para recoger el parámetro 1 de la url, es decir, el nodo.
// Por ejemploen la url node/12, arg(0) sera "node" y arg(1) será 12.
$nid = arg(1);
//Utilizamos la función taxonomy_node_get_terms, que nos devuelve un array
// con todos los términos que tiene el nodo.
$terms = taxonomy_node_get_terms($nid);
$url = array();
// Recorremos el array de términos del nodo, capturando los ids
foreach($terms as $id=>$term) {
$url[] .= $id;
}
// Generamos una lista de ids separados por +, 1+2+3
$url = implode("+",$url);
// Finalmente le pasamos al primer argumento $args[0] la lista separada por +
$args[0] = $url;
// Y usamos un segundo argumento para excluir el propio nodo
$args[1] = $nid;
return $args;
?>

Comentarios

He observado que da un error al configurar el bloque, pero que aparentemente funciona muy bien. ¿Se sabe a qué puede ser debido el error?

El error que se observa es porque antes de activar el bloque no he restringido en qué páginas se muestra, es decir, solamente en las que haya nodos (node/*).
En la página de configuración de bloques no hay nodos, así que se produce un error en la consulta, al forzar que se muestre solamente en node/*, ya no se produce el error.

<em>Si usas internacionalización, puede que necesites restringir por */node/* para el tema de los idiomas</em>

Muchas gracias por tu explicación! Ha sido de gran ayuda :) Tienes un blog muy interesante y didáctico.

Gracias!

¿Cómo se puede hacer esto mismo en drupal 6 con views2 ?
Muchas gracias

Todavía no he probado views2 (acaba de salir la version estable) pero intentaré hacer el mismo proceso para drupal6.

Hola! muy buen post! de casualidad podrias ayudarme a hacer justo eso para drupal 6? aparentemente el argument handling code ya no existe ahi ya que no se donde poner ese codigo...

Hola Bella
Sí existe el argument handling code en drupal 6, debes crear un nuevo argumento, luego en "Action to take if argument is not present" seleccionas la opción "Provide default argument" y en el select que se genera "PHP Code", está un poco mas escondido pero está.
De todas formas tengo pendiente adaptar este screencast a drupal 6 en cuanto pueda

Un saludo!

Hola! tengo el mismo problema que Bella... probe la solución que le diste pero existe un provide default argument para los dos argumentos que se deben poner en el video... taxonomy term id y node id (en drupal6 NID) entonces pongo el codigo q tienes en el post en el argumento NID pero no funciona... sigue mostrando todos los nodos sin hacer la relación por termino de taxonomia... si pongo el codigo q deberia ir en argument handling code en drupal5 en ambos argumentos en el phpcode de drupal6 entonces no muestra nada... me podrias ayudar y explicarme porfavor a ver q hago mal??? gracias de antemano por tomarte el tiempo de ayudar a los necesitados... jaja

Hola Edwin

Borro uno de los comentarios que has hecho, porque se ha duplicado, no se por qué.

Es muy probable que el código que hay en este post solo funcione en drupal 5, no lo he probado en drupal 6, pero en principio tendrias que poner el código (adaptado para que funcione en Drupal6) en el argument code del taxonomy term id, y activar la casilla "Allow multiple terms per argument", prueba a ver si así te funciona.

Saludos

Gracias pero verdaderamente soy un neofito en esto y no se como modificar el codigo para drupal 6...

Hola

tengo un problema con el modulo views.

lo que estoy haciendo es un directorio de usuarios,
un buscador. utilizo view y cck. todo bien hasta que empeze a poner mas de 12 terminos en la categoria "Area de trabajo".esta es unas de las opciones que le doy a los usuarios para la busqueda. cuando estoy creando la vista y pongo como filtro la categoria "Area de trabajo" solo aparecen los 12 primeros, y esos son los que se muestran a los usuarios.
ejemplo.
tengo usuarios de Administracion, Diseño.....ect.
si un usario quiere buscar los de diseño y ese termino es el 13 no se muestra en la opcion de busqueda.

trabajo con v5.12

saludos roal

Buenas tardes gracias por tu post... me podrias ayudar paso a paso a hacerlo en drupal6 por favor de una manera que funcione???? gracias...

Hola! podrias decirme como hacer esto mismo para drupal6 por favor???? es urgente!!! y veo que eres super experto en el tema!!!

Iveth, Alejandra, intentaré adaptar estas vistas para drupal 6 en cuanto pueda, he adaptado alguna de las que hice para drupal 5 ya aquí: http://cambrico.net/drupal/vistas-con-argumentos-en-drupal-6

Hola! quisiera saber si podrias actualizarlo para drupal 6 pq he estado intentando y nada... y es super urgente en la empresa!!! me sorprende como hay gente como tú que ayuda a las personas de una manera tan increible! esto es justo lo q andaba buscando... si pudieras actualizarlo seria estupendo... bueno... gracias de antemano!!!

Hola Peter, muchas gracias, intentaré actualizarlo lo antes posible, pero si realmente te urge en la empresa, te recuerdo que desde <a href="http://www.neurotic.es">Neurotic</a> podemos ofrecerte consultoría en Drupal para lo que necesites.

Solución encontrada en http://drupaleasy.com/blogs/ryanprice/2008/06/using-views-2-drupal-6-cre... gracias de todas maneras!

Gracias por el aporte Andrea :)

Hola, escribo para comentar un problema con una vista en un Drupal 6.10.

En la previsualización de la vista al pasarle los argumentos me muestra correctamente el contenido, pero cuando utilizo la ruta /productos/quesos no tira de la vista y muestra directamente los nodos. En cambio con la ruta /productos me muestra todos tirando de la vista.

A ver si alguien puede ayudarme.

Hola kurtis, puede ser que no hayas configurado bien el argumento, cuando se trata de taxonomias puedes elegir entre el term id y el term name, ¿con el codigo de la categoria te funciona? es decir, productos/1 en lugar de productos/quesos

Exacto, con el productos/1 funciona pero con el productos/quesos no. Tienes algún código para validar el nombre de la taxonomía?

kurtis, es el ejemplo exacto del primer video de este mismo artículo, en lugar de elegir Taxonomy: Term ID, elige Taxonomy: Term Name en las opciones del argumento

Bueno, ya lo arreglé muchas gracias.

Otra cosa, tengo un problemilla para mostrar el teaser de un nodo en el page-front.tpl.php, es decir que me recupere la lista de nodos e ir mostrando el teaser que yo quiera en función del título o del nid.

Ya sé que no es lugar, pero es que estoy buscando y no encuentro un código que me funcione.

Hola, amigo, ¿cómo estás?
Llegué a esta página buscando un código PHP para Drupal que me permitiera hace algo parecido a este que tu publicas. No soy un entendido en cuestiones de programación. A primera vista, me pareció que éste podía servirme, pero no me funciona. Yo creo que no está muy lejos de lo que necesito. Espero que puedas darme alguna orientación. Te explico.
Yo tengo una taxonomia llamada Rubros, con cientos de terminos, ya que son rubros comerciales, industriales, oficios, profesiones, etc.
Creé un menu con Taxonomy Menu, y lo ubique en el sidebar izquierdo.
Asigné esa taxonomia a un tipo de contenido, llamado "Guia", que al hacer click en un item de menu me muestra un largo listado de todos las empresas o personas que pertenecen a ese rubro.
Pero tengo otro tipo de contenido, llamado "Banner", que comparte el mismo vocabulario.
Lo que yo busco es que al hacer click en, digamos, "Abogados" en el menu, en el contenido me aparezcan todos los abogados del tipo de contenido "Guía", y en el sidebar derecho todos los abogados del tipo de contenido "Banner". Son dos tipos de contenido distintos, que comparten el mismo término de la taxonomia.
Tambien probé, en lugar de usar tipos de contenidos distintos para cada cosa, usar "Guia" para ambos, en algunos pongo el banner en el cuerpo del articulo y en el otro solo pongo el nombre de la empresa en el campo titulo.
De ninguna de las dos formas me funcionó.
No sé si fui claro con la explicación, creo que sí. Todo esto me tiene un poquitin confuso.
Bueno, cualquier orientación que pudieras darme acerca de como corregir este código para que me funcione, será eternamente agradecida.
Te envío un gran abrazo, desde la Argentina.

Gerardo

Buenos días,

tengo una duda, yo creé un view con los artículos creados en el sitio ya sean historias, páginas, artículos de blog, foros, etc, me muestra el view todos losartículos y el tipo de artículo. Mi pregunta es como se hace para que además aparezca quien fue el creador del artículo. Si selecciono User solo me aparece el usuario administrador.

Gracias.

Añadir nuevo comentario