Módulo Views en Drupal

Portada del podcast Drupalízate
Drupalízate es un podcast semanal creado por mí, donde hablo sobre desarrollo web basado en Drupal.
El contenido central es resolver las típicas dudas que pueda tener alguien que tiene o quiere tener una web en Drupal.
Aparte de resolver dudas de "clientes", también se habla de tips, recomendaciones y buenas prácticas para el Developer que recién empiezan en este mundo.
Audio y notas del episodio

Hoy toca hablar sobre uno de los módulos más usados y que mayor flexibilidad aportan a cualquier web Drupal, el módulo VIEWS.

Hoy te cuento las características básicas de Views, como configurarlo y que puedes hacer con él.

Transcripción automática de este episodio de audio (puede contener errores)

 VIEWS, VIEWS, VIEWS, VIEWS, VIEWS. Esta semana toca hablar sobre VIEWS. Dime un toto. Buenas, bienvenido otra semana más al podcast de Endrupal ST. Soy Robert Menetray, senior, freelance developer en Drupal, bla bla bla. Si quieres noticias semanales, apuntarte a Newsletter del Inquedín, donde hablo también de temas de Drupal. Esta semana, como ya te comenté la semana pasada, toca hablar sobre VIEWS. VIEWS es un módulo que viene por defecto instalado en Drupal, que básicamente te permite hacer listados. ¿Qué es un listado? Pues toda la web está montada con listados. O sea, básicamente toda la web la puedes montar con VIEWS. Esto es quizás muy hastacto, pero a ver cómo te lo digo. Tú por ejemplo tienes un blog, ¿vale? El listado principal de la página de artículos del blog, donde se ve listado pues los últimos diez artículos, ordenados por fecha y con una paginación a ver artículos anteriores, eso es un listado. Y eso VIEWS te lo permite configurar sin tocar nada de código. Por ejemplo, en vez de diez quiero veinte artículos. En vez de que salga paginador, no quiero que haya paginador para ir a página anterior siguiente. En vez de que se mueste el título y textos, lo quiero que se mueste el título en el listado. O quiero que se mueste la imagen. En vez de que cargue como la web normal, quiero que cargue en formato Ajax, por ejemplo. Al final todo esto VIEWS te lo permite modificar, ¿vale? Y permite crear listados nuevos sin tocar código, solo con un formulario de configuración. Al mismo tiempo, no solo páginas en formato listado, sino bloques que puedes colocar en cualquier otra página. Por ejemplo, en muchos blogs tenemos en un lateral, en un sidebar, tenemos el típico bloque de artículos recientes, o artículos más vistos, o cosas similares. Eso son listados también. Que en este caso se sellan, pues yo que sé, los diez artículos más visitados del mes. Y no sella un bloque listando cinco artículos ordenados por más visitas y sin paginación. Porque lo normal es que en este caso no haya paginación. Como ves, al final todos son listados en tu pal. Puedes crear, por ejemplo, también una lista de administración de usuarios. Y ver qué usuarios hay en tu web. Al final, todos son listados. Después, por ejemplo, puedes tener páginas de búsqueda donde hay filtros expuestos. Donde puedes filtrar, por ejemplo, por fecha, por precio, por título, o sea, por texto libre. Por categorías, por cualquier campo que tengas tú en tus nodos o taxonomías. Realmente, como digo, es hiperflexible. Es uno de los módulos que diferencian más Drupal de otros CMS. Y lo convierten más en un framework casi que no en un CMS. Porque realmente la flexibilidad que te da es impresionante. Vale, primero de todo, ¿por qué te interesa saber cómo funciona así? Por encima un poco views, si es un usuario de a pie, alguien que tiene una web, pero no es desarrollador. Y después, ¿por qué te interesa saber más cómo funciona desde el punto de vista de desarrollo? Primero de todo, como cliente final, si la web es tuya, no estaría de más que sepas qué cosas se pueden hacer y cuáles no con views. No estaría de más que sepas que si quieres cambiar el orden de, por ejemplo, el listado de productos, y que salgan antes los productos más baratos o los más caros, o ordenados por fecha de creación, o ordenados por categoría, o lo que sea. O por ejemplo, añadir uno en random y que cada x tiempo, porque se va a cachear, se va a cachear, cada x tiempo se modifique el orden de forma aleatoria para mostrar productos distintos. Para que, por ejemplo, en la home, tengas un listado de productos destacados. Y en verdad son productos que cada dos horas cambian y se ven cuatro productos distintos en la home. Esto es para que se vea la web más dinámica y parezca que haya más productos. En muchos casos se queda ese tipo de contenidos. Bueno, pues esto. Que sepas que tú como cliente, si tienes acceso a editar las vistas y tienes un conocimiento muy básico, podrías añadir esto, de editar sobre todo los órdenes o modificar, por ejemplo, añadir algún filtro, de, vale, en la home quiero que salgan estos productos, pero que no sean de esta categoría en concreto, porque esta categoría es la más barata y no quiero que se vean en la home. Solo quiero que se vean esas dos categorías porque son las más caras, o por motivo que sea. Al final es que sepas que tienes un mayor control si sabes editar las views, o a menos ya no editarlas, sino leerlas un poco y ver cómo están configuradas. Porque muchas veces algún cliente dice en plan de, ya, pero es que esta vista no funciona como yo quiero. Y es, ¿cómo quieres que funcione tú? Porque está configurada de esta forma, tiene este filtro y este orden. No, pues es que no quiero este filtro. Ya, pues, vale, pues empezamos por aquí. O sea, no es que no funcione como tú quises, es que no más especificado como tú quieres que vaya esta vista. Por cierto, vista es views, es la traducción en español. Vale, volviendo al tema. Como desarrollador, si te vas a la página de visión de la vista, de la views, verás que tenemos distintos view modes, que es lo que ves más arriba, y por efecto verás el view mode en el master, que sale oculto, si no tienes activo por efecto, y solo sale visible si no tienes ningún otro view mode. Si tienes otro view mode, el master se oculta y se muestra el otro, el que tengas. Un view mode es una forma de renderizar esta views. Eso puede ser en formato página, por ejemplo, pues yo creo que sería la página de artículos del blog, el listado de artículos, eso es un view mode en formato página. Después, lo que comentaba antes de en el lateral hay un bloque que muestra los artículos más leídos. Ese bloque es un view mode en formato bloque. Al final, en Drupal, en las vistas en Drupal, podemos crear tantos view modes como creamos de esa views. Mi punto de vista es que me gusta más trabajar con views independientes, en vez de tener una única views con varios view modes. ¿Por qué? Porque si tenemos la misma views con varios view modes, cuando modificamos un filtro normal o contextual, o añadimos un campo, o modificamos el orden, si no vamos con cuidado, vamos a modificar los otros view modes. Y en algunos casos sí que queremos que sea así para que todos los view modes se comporten similar, por ejemplo, con el mismo orden o con los mismos filtros, pero en muchos otros casos no. Queremos que sean similares, pero no tan similares. Y si no vamos con cuidado, vamos a sobrescribir sin querer otros view modes que no queríamos. Así que desde mi punto de vista es mejor tener views separadas, aunque sean similares, que no la misma views con varios view modes. Esto ya te lo da un poco la experiencia cuando empiezas a trabajar con ello, pero esto, que sepas que son las dos opciones. Lo generas como views separadas o como la misma con distintos view modes. Vale, ahí imaginemos que estás editando uno de los view modes. Veas que básicamente las views son tres columnas, la izquierda, la central y la derecha. La de la derecha, que son los filtros avanzados, por defecto está plegado. Está colapsado, si hay una palabra, bueno, está plegado. Si vas a la configuración lo puedes poner por defecto, se vea siempre visible. Es como lo quiero poner yo normalmente, pero normalmente, aunque esté plegado, haces clic y lo desplegas. Allí verás lo que son filtros contextuales, relaciones, puedes editar el nombre máquina y puedes jugar un poco con las agregaciones y con temas de las cachés también. Como digo, estos son los avanzados. Si te gusta jugar con temas de caché o no quieres que esta views use cachés, lo puedes desactivar. Si quieres que esta views use ajax, por ejemplo, lo puedes activar para que en este apartado de avanzado, usarlo para que use ajax. Si quieres usar para que use agregación, la agregación es, por ejemplo, cuando tienes listados que quieres que calcule en un total. Por ejemplo, un contador de número de episodios o número de artículos del blog o número total de usuarios. O por ejemplo, un contador de número total de usuarios registrados. Por ejemplo, si tienes un tipo SaaS o un proyecto SaaS que tiene distintos tipos de usuario y dependiendo de lo que hayan pagado, tienen un rol u otro, puedes crear una vista que te cuente cuántos usuarios tienes en cada rol de usuario. Lo mismo, por ejemplo, puedes contar cuántas páginas tienes en cada tipo de contenido. Páginas básicas, diez. Artículos del blog, veinte. Como digo, esto depende de qué quieres montar en tu proyecto. Pero básicamente, la agregación sirve para hacer operaciones, ya sea mínimos, máximos, sumas, lo que sea conveniente. Se activa en este lateral de avanzado. En el central tenemos alguna configuración que digamos que son las típicas de la cabecera o el footer o si no hay resultados tiene que mostrar un texto. O por ejemplo, si queremos paginación o no o qué tipo de paginación, puedes instalar módulos contribuidos que te permiten tener otros tipos de paginación. Por ejemplo, el infinite scroll, que es una paginación que cuando haces scroll te va cargando más elementos. Como Twitter, para que me entiendas. Que no hay paginación, entonces scroll y estás enganchado en la pantalla porque cuanto más scroll haces, más contenido ves. Por símilar. ¿Qué más comentar? En este central también puedes gestionar los permisos. ¿Quién puede ver esta views? Todo el mundo, solo los que tienen permisos concretos, solo los que pueden ver contenido publicado, etc. Y después está la de la izquierda, que es donde tenemos más la chicha, donde está todo. Que es el formato en el que se muestra esta views. Si es en formato tabla, si es en formato lista, lo que sea. Después, si se muestran campos o la entidad renderizada. Si tienes configurado que se muestran campos, puedes añadir qué campos quieres ver. Por ejemplo, en el listado del blog, si lo configures de esta forma, puedes especificar de no, solo quiero el título. O quiero el título y el texto, pero el texto que me lo recorte a 100 caracteres. Porque no quiero que me salga todo el texto del artículo. Y también quiero añadir el campo de imagen. O sea, puedes añadir los campos de ese tipo de contenido los que tú quieras. Y ordenarlos y hacer cosas varias. Y sobreescribirlo, si quieres también. Por contra, si tú has especificado que no quieres campos, que lo que quieres es la entidad renderizada. Puedes especificar en qué view mode de la entidad se quiere renderizar. Por ejemplo, si tenemos el tipo de contenido de blog, puede tener el view mode por defecto. Que es el de la página de detalle. Y puede tener un view mode que es el teaser, que es el modo resumen. Y tú en la plantilla o en la configuración especificas cómo se va a ver ese view mode teaser. Yo encuentro que es mejor práctica usar siempre los view modes de los nodos. ¿Por qué? Porque por ejemplo, siguiendo el ejemplo este del blog. El listado de todos los artículos se va a mostrar siempre en formato view mode teaser. Y después dentro de la página del blog, en la parte inferior, vas a mostrar por ejemplo contenido relacionado. Que son artículos de la misma categoría. Y se van a mostrar también en ese mismo formato de view mode teaser. Si por diseño ha de ser lo mismo, o visualmente lo mismo que el del listado. Tiene sentido que muestres el view mode. Porque estás re-usando los mismos estilos y básicamente te ahorras trabajo al configurar todo esto. Y si en un futuro se ha de modificar el estilo de imagen, el título, cómo se ve o algo. Lo modifiques en un sitio y se modifican todos. Por eso yo he preferido trabajar con view modes. Lo digo como recomendación. Puedes hacer lo que te venga en gana. Dicho esto, en la configuración de los campos. Debajo de esto tenemos lo que son los filtros. Aquí puedes configurar los distintos filtros. Aquí tienes filtros expuestos y los que no son expuestos. Al añadir un campo, por ejemplo, queremos filtrar por si es publicado o no. Porque hay artículos del blog que aún no hemos publicado. O queremos filtrar que sean de una cierta categoría. O que el campo de fecha sea mayor o menor que X. O que sean del autor X. Si no son expuestos, significa que el filtro no es modificable por un usuario que ve la web. Tú en la configuración lo configures de que van a ser páginas publicadas. Es un filtro que no es expuesto y nadie lo puede modificar. Todo lo que se va a ver en este listado siempre va a ser contenido publicado. Pero añadimos un filtro expuesto de categoría. Donde el usuario final va a poder seleccionar las categorías. Y en base a lo que haya seleccionado se van a mostrar unos resultados u otros. Lo más típico sería las categorías del blog, los tags. O si tienes un directorio de vehículos o de inmobiliaria, las categorías. Si es un coche moto, al seleccionar esto en un desplegable, se van a filtrar los coches o las motos. Si es un chalet o pisos, se van a mostrar los chalet o los pisos. Es un filtro normal de toda la vida. Esto Drupal te lo permite configurar totalmente y te genera el formulario expuesto. Sin que tú tengas que programar nada. Es solo configuración. Y justo debajo tienes lo que son los criterios de ordenación. Que es similar a los filtros. Añades cualquiera de los campos disponibles. Específicas si es expuesto o no, con lo cual puedes jugar con lo que tienes en orden. Por ejemplo, hay muchas webs que te permiten ordenar por fecha, ordenar por precio, ordenar por... Yo que sé, por lo que tengan ganas de ese tipo de nodo. Y nada, que al final lo puedes tener como expuesto o no. En los filtros no tiene mucha importancia el orden como tal. Tiene importancia si estás jugando con los AND y los OR. Si es un I o un O. Pero normalmente no tiene mucha importancia porque casi siempre es todo un I. Pero en la ordenación sí que tiene importancia que estén bien ordenados. Valga la redundancia. Básicamente el que esté más arriba es el que tiene mayor peso. Con lo cual, suponiendo que por ejemplo ordenamos por fecha. Primero y después por precio. Si tenemos dos páginas que se han publicado el mismo día. Y el orden es por fecha y la granularidad es por día. Habrán varias páginas que tendrán el mismo día de publicación. Pues justo después se van a ordenar dentro del mismo día por precio. Por lo que hemos configurado. Eso te da la flexibilidad de jugar con temas de días o de precio. O de primero que se muestren las páginas que están publicadas y después las que no. O por ejemplo las destacadas primero, las sticky. Por ejemplo porque un cliente que ha pagado más su artículo destacado. Sale antes que los artículos que no son destacados porque no han pagado. Para salir como destacados por ejemplo. Y todo esto es sin tocar código. Es que flipa mucho y algunos clientes dicen, ah porque no tocas código. No, en estos casos no. A unos más complejos si que hace falta tocar cosas. Pero en estos casos así más simples no hace falta tocar código. Después dentro de los filtros se pueden especificar filtros automáticos. Por ejemplo que sean artículos que el autor sea el usuario actual que está viendo esta vista. Con lo cual es un filtro automático de que cuando yo estoy viendo este listado. Voy a ver solo mis propios contenidos. Si he puesto el filtro de que el autor sea el usuario actual. O por ejemplo el filtro de que el idioma sea el idioma del usuario actual. Con lo cual si yo lo estoy viendo como un usuario que lo ve todo en inglés. Voy a ver el listado en inglés. Si estoy un usuario que lo ve todo en español. El listado lo voy a ver en español. O sea estoy cogiendo el idioma del usuario actual. Y como esto otros filtros que son automáticos. Después que eso no lo he comentado en el apartado avanzado a la derecha. Hay los filtros contextuales. Los filtros contextuales normalmente se usan para coger datos de la página actual. En el sentido de que por ejemplo cuando tenemos un artículo de un blog. Y queremos poner un bloque de artículos relacionados. Que son artículos que tengan las mismas categorías que el artículo que estamos viendo. Esto es un filtro contextual. Coges el id de la página actual. Tienes una relación con las categorías. Y básicamente estás filtrando que las categorías sean las mismas que el id de la página que estás viendo. Los filtros contextuales son un poco más complejos de saber usar. Pero son también muy potentes si los sabes usar bien. Y repito todo esto sin código. Es solo configuración. Y aquí viene después ahora la parte del código. En muchos otros casos se queda un poco corto y hace falta tocar código. En este caso Drupal tiene varios hooks. Que permiten modificar partes de cómo funciona Vista. Eso significa que podemos alterar en un hook por ejemplo el query alter. Y modificar cómo se hace la query. Añadir o quitar cosas de la query. O añadir relaciones o lo que sea. Y después tenemos otros hooks de cómo se procesan los datos una vez ya se ha hecho la query. Ya sea añadir resultados o quitarlos. Por ejemplo en algún caso yo he visto o he tenido que hacer mejor dicho. Insertar resultados falsos que en verdad por ejemplo lo que hacían era incrustar publicidad. O sea básicamente en este caso en este proyecto. Habían nodos que eran publicidad que alguien había pagado. Y esos nodos tenían que incrustar dentro del listado que veía el usuario. De su propio contenido. O sea vanes alternando dentro del listado de la Vista. Y esto con un hook se puede ser relativamente simple. Hay otros hooks que modifican cómo se ve finalmente. O sea no modifica los resultados sino que se modifica la renderización final de la Vista. En final te da por código mucha más flexibilidad y puedes hacer muchísimas más cosas. Digamos a grandes rasgos que el 95% de las veces no te hace falta tocar nada de código. Y el otro 5% que son mucho más a medida si te hace falta tocar código. Pero Drupal está muy bien pensado y tiene muchos hooks que te permiten tocar código de forma simple. Y sobre todo que eso lo afecte a esas vistas que no afecte a toda la web. Sino sólo compartimentarlo y que afecte a partes muy concretas. Y poca cosa más. Con esto ya he comentado todo lo que ha de Vistas a grosso modo. Hay otros módulos contribuidos que pueden ampliar la funcionalidad. Como he dicho el más conocido es el Infinite Scroll. Tenemos el VTX Posted Filters. Que mejora la forma o te da más flexibilidad en la forma en la que se muestran los filtros expuestos. Había un módulo que te permite generar de forma aleatoria. O sea que te modifica el orden de la Vista de forma aleatoria. Que en algunos casos puede ser útil. Que más, que más... Bueno también por ejemplo el Set Jpeg que ya lo comenté. Que no añade funcioneta a la Vista como tal. Sino que, digamos que añade un motor de búsqueda separado a MySQL y lo mete en Solar o Elastic. Y permite que las Vistas se comuniquen con Solar o con Elastic. Con lo cual toda esta funcionalidad de configurar listados. Lo puedes hacer directamente consultando a un servidor externo montado en Solar o en Elasticsearch. Pero eso ya son paraguas más complejas y bueno. Creo que me voy un poco fuera de lo que es este episodio de podcast. Pero bueno que al final es... Busca en Google, perdón en Google, en Drupal o RG. O en Google también que quizá lo encuentres mejor, más fácil. El módulo que te hace falta, la funcionalidad y seguramente habrá un módulo en Drupal que te lo permite hacer. Vale. Y nada más que no me largo más. No sé de qué voy a hablar la semana que viene. Pero bueno, estáte atento y cualquier cosa me cuentas o por LinkedIn o en mi web menetray.com Chao

¿Tienes algún proyecto en mente?

Si quieres hacer algo en Drupal tal vez puedas contratarme.

Ya sea para consultoría, desarrollo o mantenimiento de sitios web Drupal.