main content
< Volver a blog sobre aplicaciones móviles

Listados dinámicos en Drupal con Views sin código

Cómo crear listados dinámicos en Drupal con el módulo Views sin escribir una sola línea de código

Si has trabajado con Drupal aunque sea un par de semanas, seguramente ya has usado Views sin saberlo. La portada con los últimos artículos, la lista de usuarios del backend, el bloque de contenido reciente en una barra lateral... casi todo lo que tiene pinta de "listado" en un sitio Drupal sale de ahí. Y lo mejor: se construye apuntando y haciendo clic, no escribiendo PHP.

Llevo años montando sitios en Drupal y todavía me sorprende la cantidad de cosas que se resuelven con Views antes de tener que abrir el editor de código. En este artículo te cuento cómo funciona, qué conceptos necesitas dominar y, sobre todo, te llevo de la mano para crear tu primera vista de "últimas noticias" sin tocar una sola línea. Vamos a ello.

Qué es Views y por qué está en el corazón de Drupal

Views es un constructor de consultas visual. Dicho de otro modo: traduce lo que tú quieres ver ("dame los diez artículos más recientes de la sección de prensa, ordenados por fecha") en una consulta a la base de datos, y luego lo pinta en pantalla con el formato que elijas. Todo desde la interfaz de administración.

Lo importante para Drupal 10 y Drupal 11 es que Views ya viene en el core. No tienes que descargar ni instalar nada externo. Solo asegúrate de que los módulos Views y Views UI estén activados (el segundo es el que te da la pantalla para diseñar las vistas; en producción muchos lo desactivan por seguridad y rendimiento, pero lo necesitas para construir).

Una vez lo tienes claro, el patrón mental es sencillo: defines qué datos quieres, cómo los filtras y ordenas, y dónde aparecen.

Para qué sirve realmente

La tentación es pensar en Views solo como "listas de noticias", pero da para mucho más. Estos son los usos que aparecen una y otra vez en proyectos reales:

  • Páginas completas: una página de archivo con todos los artículos de un blog, paginada y filtrable.
  • Bloques: el típico "lo más leído" o "productos relacionados" que colocas en una región de tu tema.
  • Feeds: un RSS o un endpoint que otros sistemas pueden consumir.
  • Listados de administración: tablas internas para que tu equipo gestione contenido, con columnas a medida.
  • Páginas de taxonomía: cuando alguien entra en una categoría y ve todo lo que cuelga de ella.

La misma herramienta, configurada de formas distintas, cubre todos esos escenarios. Por eso merece la pena entenderla bien.

Los conceptos clave que debes dominar

Antes del paso a paso, conviene poner nombre a las piezas. No te asustes con la lista: cada concepto es bastante intuitivo en cuanto lo ves en la pantalla.

Displays: el mismo dato, varias caras

Una vista puede tener varios displays (visualizaciones). Cada display es una forma de mostrar los mismos resultados:

  • Page (página): genera una URL propia, por ejemplo /noticias.
  • Block (bloque): produce un bloque que colocas donde quieras desde Estructura > Diseño de bloques.
  • Attachment (adjunto): se "engancha" a otro display para mostrar resultados complementarios encima o debajo.
  • Feed: expone los resultados como RSS u otro formato sindicado.

Lo bueno es que comparten configuración base, así que puedes tener una página y un bloque que beben de la misma consulta sin duplicar trabajo.

Campos frente a vista de contenido

Aquí hay una decisión temprana importante. Puedes mostrar cada resultado de dos maneras:

  • Vista de contenido (content / entity): Drupal renderiza la entidad completa con el modo de visualización que elijas (por ejemplo, "Resumen"). Cómodo y coherente con el resto del sitio.
  • Campos (fields): tú eliges campo a campo qué sale (título, fecha, imagen, un texto recortado) y cómo se ordena. Mucho más control, ideal para tablas y diseños a medida.

Para una tarjeta de blog suelo tirar de campos; para un listado que debe respetar el diseño global de la ficha, voy con vista de contenido.

Filtros y filtros expuestos

Los filtros acotan qué entra en el listado: "solo contenido publicado", "solo del tipo Artículo", "solo de este año". Son fijos: tú los defines y el visitante no los toca.

Los filtros expuestos son la versión interactiva. Le das al usuario un formulario para que filtre por sí mismo: un desplegable de categorías, un buscador por palabra clave, un selector de fecha. Es lo que convierte un listado estático en algo que se siente como una pequeña aplicación.

Ordenación, relaciones y argumentos

Tres piezas más para redondear:

  • Criterios de ordenación: por fecha descendente, por título alfabético, por número de comentarios... y puedes combinar varios.
  • Relaciones: cuando necesitas datos que viven en otra entidad. Por ejemplo, mostrar el nombre del autor partiendo del artículo: la relación "salta" del nodo al usuario para que sus campos estén disponibles.
  • Filtros contextuales (argumentos): filtros que reciben su valor desde la propia URL o el contexto. El caso clásico es la página de categoría: el mismo display sirve para todas las categorías porque el identificador del término llega como argumento en la ruta.

Los argumentos son el concepto que más cuesta al principio, pero también el que más potencia desbloquea. Una sola vista con un filtro contextual reemplaza a docenas de páginas hechas a mano.

Paginación

Cuando un listado crece, no quieres volcar 800 resultados de golpe. Views te da varias opciones desde el apartado Pager:

  • Paginación completa: el clásico "1, 2, 3, siguiente", con su número de elementos por página.
  • Mini-paginador: solo anterior y siguiente, más discreto.
  • Mostrar un número fijo sin paginar: perfecto para un bloque de "últimos 3".
  • Mostrar todo: úsalo con cabeza y solo cuando sepas que el conjunto es pequeño.

Un detalle que se olvida a menudo: puedes activar un offset para saltarte los primeros resultados. Sirve, por ejemplo, para que un bloque destacado muestre la noticia número uno y el listado de debajo empiece en la dos sin repetirla.

Formatos de visualización

El formato decide la estructura HTML del listado. Los tres que más se usan:

  • Tabla: filas y columnas. Ideal para datos tabulares y para listados de administración; además permite ordenar haciendo clic en la cabecera.
  • Cuadrícula (grid): organiza los resultados en una rejilla de filas y columnas. Muy socorrido para galerías o tarjetas de producto.
  • Lista HTML (ul/ol): una lista no ordenada u ordenada, limpia y semántica.

Hay también un formato "no formateado", que simplemente apila los resultados sin envoltorio, muy útil cuando el diseño lo controla tu CSS o tu tema.

Paso a paso: una vista de "últimas noticias" sin tocar código

Vamos con lo práctico. El objetivo: una página en /noticias que muestre los artículos publicados, los cinco más recientes primero, con título, fecha e imagen. Doy por hecho que tienes un tipo de contenido Artículo (o el que uses para noticias).

1. Crea la vista. Ve a Estructura > Vistas > Añadir vista. Ponle un nombre, por ejemplo "Últimas noticias".

2. Define qué muestra. En "Ver", elige Contenido del tipo Artículo. Marca también la opción de ordenar por Fecha de publicación descendente; Views te lo ofrece directamente en este asistente.

3. Activa la página. Marca la casilla "Crear una página", indica el título y la ruta noticias. Aquí mismo puedes decir cuántos elementos por página quieres (pon 5) y si habrá paginador.

4. Guarda y entra a editar. Pulsa "Guardar y editar". Ahora estás en el panel completo de Views, donde afinas todo lo demás.

5. Comprueba el filtro de publicado. En la columna de Criterios de filtrado debería estar "Publicado: Sí". Si no, añádelo. Esto evita mostrar borradores.

6. Elige campos en lugar de la ficha completa. En el formato, cambia "Mostrar contenido" por "Campos". Añade el título (con enlace al contenido), el campo de fecha y el campo de imagen, con el estilo de imagen que prefieras.

7. Ajusta el formato. Si quieres tarjetas en rejilla, cambia el formato a Cuadrícula. Para un listado vertical simple, deja Lista HTML.

8. Previsualiza. Abajo del todo tienes una vista previa en vivo. Sin recargar la página puedes ver exactamente qué saldrá. Ajusta hasta que te guste.

9. Guarda. Visita /noticias y ahí tienes tu listado, generándose solo cada vez que publiques una noticia nueva.

Lo que acabas de montar se actualiza solo: publicas un artículo y aparece arriba sin que nadie toque nada. Eso es lo que significa "dinámico".

Si más adelante quieres un bloque de "últimas 3 noticias" para la portada, no empieces de cero: añade un display de tipo Block a esta misma vista, ponle su propio paginador de 3 elementos y listo.

Rendimiento y caché de vistas

Una vista mal pensada puede generar consultas pesadas, sobre todo si abusas de relaciones o muestras la entidad completa de cientos de resultados. Por suerte, Views integra su propia caché y, en Drupal 10/11, se apoya en el sistema de cache tags del core.

En el apartado Avanzado > Otro > Caché de cada vista tienes el control:

  • Etiquetada (tag-based): la opción recomendada por defecto. La vista se sirve cacheada y se invalida automáticamente cuando cambia el contenido relacionado. Es decir, si publicas un artículo nuevo, la caché de "últimas noticias" se refresca sola.
  • Basada en tiempo: define cuánto duran en caché los resultados y el renderizado. Útil cuando los datos cambian poco.
  • Ninguna: solo para depurar o casos muy concretos. En producción casi nunca.

Dos consejos de quien se ha pegado con esto en sitios con tráfico: muestra solo los campos que de verdad necesitas (cada campo extra es trabajo de render) y vigila los filtros expuestos, porque cada combinación distinta genera una variante cacheada diferente. Y si el sitio es grande, la opción "Mostrar todo" sin paginar es una bomba de relojería.

Cuándo Views se queda corto y conviene código

Por muy potente que sea, Views tiene su techo. Reconocer cuándo lo has alcanzado te ahorra horas de pelearte con la interfaz para algo que en PHP son veinte líneas. Señales típicas:

  • Necesitas una lógica de filtrado que depende de varias condiciones cruzadas o de cálculos que la interfaz no expone.
  • Tienes que agregar o transformar datos de formas que Views no contempla de serie (sumas complejas, agrupaciones poco convencionales).
  • El rendimiento no cuadra y necesitas una consulta optimizada a mano o una capa de datos distinta.
  • Quieres integrar fuentes externas que no son entidades de Drupal.

La buena noticia es que rara vez es todo o nada. Puedes empezar con una vista y extenderla con un plugin propio (un filtro, un campo o un estilo a medida), o quedarte con Views para el 90 % y resolver el 10 % difícil con un poco de código. Para los casos en que sí toca bajar al nivel de la consulta, el patrón base en Drupal es así de directo:

$nids = \Drupal::entityQuery('node')
  ->condition('type', 'article')
  ->condition('status', 1)
  ->sort('created', 'DESC')
  ->range(0, 5)
  ->accessCheck(TRUE)
  ->execute();

Pero, sinceramente, si lo que necesitas es eso, Views lo hace igual de bien sin que escribas nada. Guárdate el código para cuando de verdad haga falta.

Cuando el listado se complica más de la cuenta o el rendimiento empieza a doler, contar con alguien que conozca a fondo el motor de Drupal marca la diferencia. Si quieres que te montemos los listados que necesitas y dejarlos optimizados desde el primer día, en Tangram lo tenemos más que rodado.

Tu próxima vista, sin tocar código

Views es una de esas herramientas que, una vez la entiendes, cambia tu forma de trabajar con Drupal. Lo que antes parecía requerir un desarrollador se resuelve en diez minutos apuntando y haciendo clic: filtros, ordenación, paginación, varios formatos y caché incluida. Empieza por algo pequeño como la página de últimas noticias, juega con la previsualización en vivo y ve sumando displays a medida que los necesites. Verás lo rápido que le coges el truco.

Contacta con nosotros
Fila 1