Vistas con argumentos en Drupal 6

Con total seguridad, la petición que más recibo en el blog es que adapte los artículos técnicos sobre vistas con argumentos que realicé hace unos meses a Drupal 6 y Views 2.
Mi intención es volver a realizar los mismos ejemplos, pero adaptados a Drupal 6, si queréis que haga algún otro, pedídmelo en los comentarios y vemos si se puede hacer.

¿qué es un argumento?

Un argumento es un parámetro que se pasa a una vista y que se utiliza dentro de ésta para generar contenido dinámico que cambia según el argumento.
Los filtros son una forma de diferenciar contenido de forma estática por cada vista, es decir, que si filtramos por el tipo de contenido story, la vista siempre nos devolverá tipos de contenido story, sin embargo, si utilizamos el tipo de contenido como un argumento para una vista, si la url es nombre-de-la-vista/story nos mostrará tipos de contenido story, pero si accedemos a la url nombre-de-la-vista/page, nos mostrará tipos de contenido page.

Voy a adaptar el ejemplo que utilicé para mostrar el funcionamiento básico de vistas con argumentos para drupal 5, una vista que filtra el contenido según el usuario que lo ha creado.

El nuevo interfaz de Views 2 proporciona mucha más potencia a la hora de configurar las vistas, pero también es mucho más complejo, y si estamos acostumbrados al Views 1, a primera vista es un poco lioso.

paso a paso

  • Accedemos a nuestro sitio como administradores o como otro usuario que tenga permisos para crear vistas.
  • Vamos a Administer » Site Building » Views » Add
  • Ponemos el nombre de la vista, por ejemplo, contenido_usuario, y asignamos opcionalmente una descripción para la vista y un tag, que servirá para localizarla más fácilmente en el futuro. También deberemos elegir el tipo de vista, según el contenido que vayamos a mostrar, en este caso Node.
  • Le damos a Siguiente.
  • Añadimos un nuevo tipo de Display, según lo que necesitemos, en este caso Page.
  • En Basic Settings podemos configurar infinidad de opciones, el nombre del Display, opciones de visualización, uso de Ajax... para este ejemplo dejaremos todo como está.
  • En Page Settings hacemos click en la opción de Path, None, y asignamos que nos convenga, en este caso el path que he elegido es contenido-del-usuario.
  • Para mostrar el contenido en forma de nodos, se nos plantean dos opciones:
    • Opción 1: Utilizando la opción Fields en el Row Style dentro de Basic Settings, deberemos añadir elementos en la opción Fields. Por ejemplo, dentro de Node, podemos seleccionar Title para mostrar el título de cada nodo, y activamos la opción "Link this field to its node" para que el título sea un link al propio nodo, y el teaser, que es el resumen del contenido del nodo.
    • Opción 2: Seleccionando la opción Node en el Row Style dentro de Basic Settings, no tendremos que configurar Fields y podremos mostrar solamente el teaser u ocultar los comentarios de cada nodo.
  • Para filtrar los nodos según el argumento que escojamos, en la sección Arguments, añadiremos un argumento de tipo User, o bien User: Name para filtrar por el nombre del usuario o bien el User: Uid para filtrar por el id. Preferiblemente usaremos el Uid ya que la búsqueda de los datos irá más rápido.
    En las opciones de los argumentos, podremos seleccionar el comportamiento de la vista si se omite el argumento (mostrar todos los nodos, un error 404, etc), además de otras opciones avanzadas sobre la validación del mismo.
  • Finalizamos la configuración con las opciones de órden (Sort criteria) y los filtros que necesitemos (Filters). Es recomendable añadir el filtro Node: Published para evitar que la vista muestre contenido no publicado. También añadiremos para el ejemplo Node: Type para filtrar por el tipo de contenido story.
  • Guardamos la vista y ya podemos probar pasándo el id del usuario que necesitamos. Si accedemos a nuestra web con la url contenido-del-usuario/1 veremos el contenido creado por el admin, y si accedemos a contenido-del-usuario/55 veremos el contenido creado por el usuario 55

demostración en video

Como las cosas parecen mucho más sencillas cuando se ve una demostración, os dejo el screencast donde muestro el ejemplo del paso a paso anterior.

Comentarios

No sabes lo que te agradezco está introducción. Esta misma tarde me iba a poner a profundizar en Views 2.

Espero que te sea de utilidad, en breve haré la adaptación de los otros <a href="http://cambrico.net/drupal/mas-vistas-con-argumentos-en-drupal-jugando-c... ejemplos</a>, que son un poco más complejos, estate atento ;).

Pedruzco muchassssssssssssssssssssssssssssssss gracias
Saludos
Rosa

una consulta, y de ante mano gracias por tu ayuda, después de lidiar con view tengo una necesidad y es que me permita que el argumento fecha sea ingresado por el usuario y se desplieguen las noticias de la fecha seleccionada (link desde el menú ->noticias economicas ( aparecen todas las noticias ingresadas díariamente). ya cree la vista y me funciona pero en live view.

Saludos
Hugo

Enhorabuena por tu blog...muy util. Ahora, abusando de tu amabilidad, una duda que me está poniendo malo: creo una View para que en el frontpage me aparezca una lista de los ultimos posts de un blog, con fecha, teaser, link al texto completo y unas cuantas etiquetas de una taxonomia. Por ahi viene elproblema: cuando añado este campo, me aparecen las entradas duplicadas, tantas veces como etiquetas tenga la entrada. Como puedo evitar esos duplicados? Gracias de antemano.Un saludo desde Santiago de Compostela

Hugo, Jose María, en breve haré un artículo con cómo hacer estas vistas que pedís, estad atentos :)

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.

kurtis, te he respondido en el otro artículo, por favor procura no duplicar los comentarios, con una vez que preguntes ya es bastante :)
http://cambrico.net/drupal/mas-vistas-con-argumentos-en-drupal-jugando-c...

[...] otro artículo anterior ya he ofrecido mi definición de argumentos para vistas en drupal, vamos ahora a definir qué es una relación. Las relaciones en las vistas para drupal permiten [...]

Hola Pedro...

Este mes de julio que no sabia que hacer... ;-) estoy profundizando en el tema Vistas y... tu artículo me ha facilitado notablemente las cosas...

Saludos

PD: ¿Nos vemos en París?

Sí que voy, pero tengo que cerrar el tema logístico antes de que me pille el toro!

Hola , muy bueno tu tutorial para comprender vistas con argumento.
No se mucho de programacion recien estoy empezando a usar drupal, por ello me resulto muy útil.

Quisiera preguntarte lo siguiente:
Quiero hacer que una vista (tipo bloque) de un views muestre solo los nodos que cumplan determinada condicion . Lo que deseo es hacer lo mismo que nodo Publicado si/no

Creo un tipo de contenido noticias, le agrego un field tipo texto single onf/of- le pongo como valores permitidos si y no .

Pero ahora no se como decirle al views que solo muestre los nodos con el valor si o el valor no .

Pero no logro comprender como hacerlo. si me puedes dar una pista desde ya muchas gracias.

Tienes que añadir un Filter (Filtro) y en la sección de Content verás el campo del tipo de contenido que has creado y podrás seleccionarlo y filtrar los valores que quieres o no quieres.

Hola, tengo un detalle con una vista que he creado, el tema es similar al expuesto aqui, explico lo que he hecho y lógicamente el resultado no es el que deseo:

1.- creo una vista de tipo nodo.
2.- A esa vista le añado un filtrado por tipo de contenido.
3.- Añado los campos que se mostraran en esa vista.
4.- En argumentos especifico un campo (CCK) que fue previamente declarado en el tipo de contenido por el que estoy filtrando, para que sea el contenido de ese campo con el que se compare el argumento.
5.- Especifico que el resultado me sea mostrado en tipo bloque.
6.- Configuro el bloque para que se muestre en todos mis nodos.
7.- Realizo una prueba en el preview poniendo el argumento que se enviara por la url y si me muestra el resultado filtrando tanto por tipo de contenido, como considerando el argumento guardado en el campo (CCK).

Ahora lo que hago es lo siguiente escribo http://www.midominio.com/mi-argumento y previamente tengo un nodo en el cual especifique en el campo (CCK) ese mismo valor "mi-argumento" y sin embargo no me muestra nada como resultado como si no se recibiera argumento alguno.

Agradeceré si es que se comprendió y no complique mucho la explicación me pudieran apoyar indicando algo que este pasando por alto.

Hola, ante todo quiero decirte que el tutorial está muy bueno. Pero soy nueva en Drupal y por lo que entendí en este tutorial los argumentos una vez que está creada la vista se pasan por la URL ¿No existe la posibilidad de que sea el usuario el que inserte el argumento?
Por ejemplo:
Tengo un tipo de contenido Empleado y el tipo de contenido Departamento, en Empleado tengo un node Reference hacia Departamento, porque cada empleado pertenece a un Departamento específico. ¿Se podría crear una vista donde existe un campo de texto donde el usuario inserte el nombre del Departamento y me muestre todos los Empleados que pertenencen al mismo?

Gracias Isabel.

Lo que tu buscas se llama "Exposed filters", puedes crear un Filtro de ese departamento y darle al botón Expose, easí los usuarios pueden introducir lo que ellos quieran para filtrar la vista.

Hola buenas...

Soy novato en esto de Drupal, y tengo un problemilla que no sé cómo resolver, e intento buscar en internet pero no atino a encontrarlo...

resulta que he creado un nodo, que entre otros tiene un campo imagen, y un campo link...

He creado una vista para sacar un listado de los nodos de este estilo, y consigo mostrar la imagen, y a continuación la url, pero yo lo que quiero es que la propia imagen sea un enlace a dicha url... No sé si me explico...

Me podéis ayudar??

Muchas gracias!

P.D.: Felicidades por el blog! buscando sobre el tema, me he leido un par de posts, y me ha parecido bastante interesante y bien explicado...

Vale... Ya lo he conseguido... No hay nada como leerse "detenidamente" las instrucciones que te aparecen directamente al usar el módulo... jeje!!

Tenía que poner en la vista el Field de url antes que el de la imagen, y después marcar la opción de exclude "from display"...

Y por último en la imagen marcar la opción "Output this field as a link" y escribir el pattern que aparece más abajo...

Saludos!

hola!!!
Quisiera que alguien me pudiera ayudar?
Lo que pasa es que tengo 15 eventos los cuales se conmemoran en diferentes fechas, unos en enero, otros en febrero en marzo etc....

Pero no se como filtrar eso en una vista en drupal

osea que si le doy en la pestaña de enero me aparescan solo los eventos de enero

Hola,

Este video me ha sido de gran ayuda es justo lo que buscava poder filtrar contenidos pasando un parametro.

Pero ahora quiero hacer que en el menu de navegacion me aparezca un item que diga Mis contenidos y que haya un link a la vista creada y que le pase como parametro el id del usuario logado.

Ejemplo:

Un link con url mi-vista-filtrada/12

Y se mostrarian los contenidos del usuario 12 pero no se como poner en el menu para que me ponga el 12 ese automaticamente mirando que usuario es el que esa logado.

Muchas gracias y enhorabuena por la pagina!

Hola

Una pregunta se puede pasar mas de un argumento a una vista?

Por ejemplo pasar el id de un usuario y a la vez el id de un tag?

<p>Sobre las dos preguntas que haces biko8, la primera, en views hay una opción de poner menú, creo que puedes usar wildcards pero no estoy seguro, prueba a poner %user_uid_optional como el id de usuario, echale un vistazo a los wilcards http://drupal.org/node/209056 para cargar cosas en el menu.</p><p>Mas de un argumento a una vista, claro, sin problemas, los añades en orden y los tratas en orden y listo.</p>

Gracias por contestar pedro!

Pero como hago para pasar mas de un argumento? en la vista he puesto uid como argumento 1 y taxonomy term como segundo argumento, si le quiero pasar a al vista el usuario 1 y el term jQuery como tendria que ser la url?

http://localhost/proyectodrupal/vistaetiquetasusuario/1/jQuery
http://localhost/proyectodrupal/vistaetiquetasusuario/1+jQuery
http://localhost/proyectodrupal/vistaetiquetasusuario/1,jQuery

He provado estas maneras y ninguna funciona, como lo hago???

Gracias!

Lo he conseguido!

El formato correcto es asi:
http://localhost/proyectodrupal/vistaetiquetasusuario/1/jQuery

No me salia por que tenia puesto una configuracion de validacion incorrecta.

También he conseguido hacer que se muestren los tags que ha creado un usuario en concreto.

Esto lo he conseguido poniendo un argumento id y he puesto que coja un valor por defecto que es: User ID from logged in user.

Hola, estoy haciendo un blog de noticias, y cuando pulso en una de ellas se accede a esa noticia y se ve de modo completa esa noticia. Lo que me gustaría es que en la barra lateral, donde están los bloques, tener un bloque que me muestre los comentarios de esa noticia que en ese momento estoy viendo.

Estoy intentando hacerlo con views, pero a lo mucho que he llegado es que me aparezcan todos los comentarios, y no es lo que quiero, sino que necesito que me aparezcan sólo los de esa noticia que actualmente estoy viendo.

He probado a usar tokens, y diferentes configuraciones con filtros y argumentos, pero no doy con la tecla.

Hola, acabo de empezar con Drupal, y voy bastante perdido. quiero mostrar los datos de una manera, pero no se si esto se hace con las Vistas o se hace de otra forma.

Mi web trata sobre animales para adoptar, por lo que recopilo información y fotos de esos animales, contacto, etc. (con la posibilidad de que el propio usuario inserte nuevos animales), y quiero categorizar en el menu por animales (perros, gatos y luego por provincias.

Te cuento lo que quiero conseguir:
Quiero que en la "home" se muestren todos los animales (paginado) disponibles ordenados por fecha, pero quiero conseguir un formato en concreto:

Foto, Descripcion amplia, contacto y fecha de alta. Y que se repita en bucle para todos los animales disponibles, sin que de la sensación de varios posts

Al hacer click en la foto por ejemplo acceder a una nueva página con todas las fotos e información ampliada para ese animal en concreto.

No tengo ni idea de como hacerlo, pero creo que con vistas se puede.

Espero que me orientes si puedes, Muchas Gracias!

Hola Pedro,

tu tutorial me ha sido muy útil, muchas gracias.

Mi problema es que quiero añadir un bloque a la página creada con las taxomias, y este solo se muestra en la principal.

Esto es si la página principal es pagina-principal, en esta se muestra el bloque, pero en pagina-principal/argumento1 no se muestra. He configurado el bloque para que se muestre en pagina-principal/*.

Muchas gracias por todo

Añadir nuevo comentario