En este artículo, continuaremos explorando los poderes de las vistas y nos centraremos en cómo usar relaciones, filtros de contexto y reescribir resultados de campo. En un tutorial anterior, le mostré cómo crear una nueva vista y realizarle personalizaciones básicas. Hemos visto cómo seleccionar un formato de visualización, qué campos mostrar y cómo filtrar y ordenar los resultados.
En este artículo, daremos un paso más y veremos qué son las relaciones y los filtros contextuales: las dos opciones más importantes que se encuentran en el campo Avanzado a la derecha de la página de edición de la vista. Además, reescribiremos la salida de nuestros campos y combinaremos sus valores en uno.
Para empezar, tengo una vista de artículo simple que solo muestra los títulos. Muy fácil de configurar si quieres seguir. Y hay tres cosas que quiero lograr en el futuro:
- Haz que la vista también muestre el nombre de usuario del autor de la publicación.
- Hacer que la vista solo muestre artículos escritos por el usuario que inició sesión
- Hacer que el nombre de usuario del autor aparezca entre paréntesis después del título.
Relaciones
Primero, hagamos que la vista incluya el autor de los artículos. Si la vue affiche des champs (plutôt que des modes d’affichage ou quoi que ce soit d’autre), tout ce que nous avons à faire est de trouver le champ avec le nom d’utilisateur de l’auteur, n’est -No es ? Malo. El problema es este: la tabla de nodos solo contiene una referencia a la entidad de usuario que creó el nodo (en forma de identificación de usuario – uid). Eso es prácticamente todo lo que encontraremos si buscamos campos relacionados con el usuario: Contenido: uid del autor.
Lo que debemos hacer es usar una relación con la entidad de usuario que se encuentra en la tabla de usuarios. Las relaciones son básicamente una forma elegante de decir que la tabla A (en nuestro caso, el nodo) se unirá a la tabla B (en nuestro caso, el usuario) para recuperar datos relacionados con ella (como el nombre del usuario y muchos otros) . Y la unión se realizará en nuestro caso en el campo uid que corresponderá en las dos tablas.
Así que sigamos adelante y agreguemos una nueva relación de tipo Contenido: Autor. En Identificador, podemos poner un nombre descriptivo para esta relación, como Autor del contenido. El resto lo podemos dejar por defecto.
Ahora, si va a agregar un nuevo campo, notará muchos más que se relacionan con el usuario que creó el contenido. Continúe y agregue el campo Usuario: Nombre. En su configuración, verá una lista de selección de relaciones en la parte superior donde la identificación de la relación que acabamos de especificar se selecciona automáticamente. Esto significa que este campo se recupera utilizando esta relación (o unión de tabla). Guardar el campo ahora agregará el nombre de usuario del autor, ya visible en la vista previa.
También puedes encadenar relaciones. Por ejemplo, si la entidad de usuario tiene una referencia a otra tabla mediante un identificador único, puede agregar una segunda relación. Utilizará el primero e importará los campos de esa tabla. Entonces, el resultado final será que la vista mostrará los campos vinculados al nodo a través del usuario que creó el nodo, pero no estrictamente desde la tabla de usuarios, sino en otro lugar conectado con el autor. Y así sucesivamente, puedes unir mesas como esta.
filtros contextuales
Los filtros contextuales son similares a los filtros normales en el sentido de que puede usar principalmente los mismos campos para filtrar registros. Donde los filtros de contexto difieren significativamente es que no establece el valor del filtro cuando crea la vista, sino que se toma del contexto.
Hay muchos contextos diferentes de los que puede provenir un valor de filtro, pero principalmente proviene de la URL. Sin embargo, puede hacer que Views también busque contextos en otros lugares, como el ID del usuario que inició sesión.
Lo que vamos a hacer ahora es agregar un filtro contextual para que la vista solo muestre artículos escritos por el usuario que inició sesión. Así que no lo dudes más y añade un nuevo filtro contextual del tipo Content: Author uid. Luego, en el conjunto de campos CUANDO EL VALOR DEL FILTRO NO ESTÁ EN LA URL, seleccione la opción Proporcionar valor predeterminado. Nuestro objetivo aquí es que Views busque en otra parte si no puede encontrar el ID de usuario en la URL.
Luego tiene algunas opciones en la lista de selección de tipo, donde debe elegir la ID de usuario del usuario que inició sesión. Esto hará que Views tome la identificación del usuario que ha iniciado sesión y la pase a View como un filtro. El resto lo puedes dejar como está y guardar el filtro. Inmediatamente notará en su resumen que solo se muestran los artículos de los que es autor. El filtrado se realiza dinámicamente. Si inicia sesión con otra cuenta de usuario, solo debería ver los artículos escritos por esa cuenta de usuario.
Una gran cosa acerca de los filtros de contexto es que si muestra una vista mediante programación en un módulo personalizado, puede pasar el valor del filtro en el código, lo que abre muchas posibilidades.
Reescribir campos
Lo último que haremos en este tutorial es reescribir campos para concatenar sus valores. Demostraremos esta técnica modificando el campo de título para incluir el nombre de usuario del autor entre paréntesis.
Comenzaremos reorganizando el orden de los campos y moviendo el título para que sea el último en aparecer. La razón por la que queremos hacer esto es que cuando reescribe los campos, puede usar tokens que obtienen valores solo de los campos agregados antes del que se está reescribiendo. Y dado que queremos reescribir el campo de título, queremos que esté presente el token para el valor del nombre de usuario, por lo que debemos moverlo antes del campo de título.
Ahora que el campo de título es el último, edite el campo de nombre de usuario del autor y desmarque la casilla Crear etiqueta y luego marque la casilla Excluir de la visualización. Ahora puede guardar el campo. La razón por la que excluimos este campo para que no se muestre en nuestra vista es que no lo duplicamos una vez que lo concatenamos con el campo de título.
A continuación, edite el campo de título y, en SOBREESCRIBIR RESULTADOS, marque la casilla Sobrescribir la salida de este campo. Debería aparecer un nuevo cuadro de texto debajo donde escribiremos el nuevo contenido para este campo. Si escribe un galimatías allí y guarda el campo, notará que el título se reemplaza con ese galimatías.
Debajo de este cuadro de texto, también verá PATRONES DE REEMPLAZO. Estos representan tokens de todos los campos en la vista cargada antes de esta (e incluyendo esta también). Así que si has seguido, verás allí [name] y Drupal 7: Relationships, Contextual Filters and Field Rewriting in Views 3 – SitePointEntre otros.
Lo que tenemos que hacer ahora es poner esos tokens en este cuadro, envueltos con cualquier texto o marcado que queramos. Habiendo dicho que queremos que el nombre de usuario esté entre paréntesis después del título del nodo, podemos agregar lo siguiente al cuadro de texto para lograrlo:
[title] ([name])
Guarde el campo y verifique el resultado. Ahora debería tener el usuario del autor entre paréntesis. Sin embargo, todavía no es perfecto. Dejamos marcada la casilla Vincular este campo al contenido original del campo de título y eso interrumpe un poco el resultado porque el nombre de usuario también tiene un vínculo a la página de perfil del usuario. Lo que queremos es un enlace limpio al título del nodo y entre paréntesis (que en sí mismos no hacen referencia a nada) el nombre de usuario a la página de perfil del usuario.
Primero, agregue un nuevo campo llamado Content:Path (la ruta al nodo). Asegúrese de excluirlo de la visualización, elimine su etiqueta y muévalo antes del campo de título. A continuación, edite el campo de título, desmarque la casilla Vincular este campo al contenido original y reemplace el texto REESCRIBIR RESULTADOS con esto:
los [path] el token está disponible en el nuevo campo que acabamos de agregar. Y después de guardar, ya debería ver en la vista previa una visualización mucho más clara de los nodos de título y los nombres de usuario entre paréntesis.
Conclusión
En este tutorial, analizamos tres aspectos principales de la creación de vistas en Drupal 7: relaciones, filtros de contexto y reescritura de campos. Hemos visto cómo, con el uso de relaciones, también podemos usar información de entidades relacionadas, no solo la de la tabla base sobre la que se construye una vista. Los filtros contextuales son excelentes cuando la vista necesita mostrar contenido dinámicamente en función de varias condiciones contextuales (como una URL o un usuario conectado). Finalmente, aprendimos a reescribir campos y crear otros más complejos con valores tomados de múltiples campos. Como puede ver, esta técnica es muy poderosa para tematizar vistas porque nos permite producir marcado complejo.
Views es prácticamente el módulo de Drupal más popular y es muy complejo. A pesar de su complejidad, crear vistas como administrador del sitio es muy sencillo. Todo lo que necesita comprender son algunos conceptos básicos y estará listo para comenzar. Desarrollar para Views para ampliar su funcionalidad o exponer datos también es una experiencia agradable. Si desea obtener más información al respecto, puede leer mi tutorial sobre cómo exponer su propio tablero de módulo personalizado a las vistas aquí mismo en Sitepoint.com.