Pasar al contenido principal
Imagen
Views

Pasar argumentos al filtro contextual de una vista

En el desarrollo de páginas web a menudo nos encontramos con situaciones y desafíos que requieren soluciones versátiles y personalizadas para un caso de uso específico. 

Las vistas en Drupal son una poderosa herramienta que permiten generar listados de forma intuitiva desde la interfaz de administración, sin requerir apenas conocimiento de MySQL o cualquier lenguaje de base de datos relacional. Los filtros contextuales son una forma adicional a los filtros clásicos que permite configurar una vista, ya que son filtros que como bien indica la palabra, proceden de un contexto diferente, como por ejemplo de la url.

El problema: mostrar información de entidades distintas en una vista

Imagina que estás construyendo un sitio web con Drupal que incluye un sistema de comercio electrónico utilizando Drupal Commerce 2. Una de las páginas que necesitas crear es una tabla que muestre información detallada sobre los productos y los elementos del pedido (order items) asociados a un pedido específico. Sin embargo, surge un problema: al mostrar la descripción (body) de un producto, los demás campos como el precio unitario (Unit price) y el precio total (Total price) muestran la moneda por defecto (€), independientemente del método de pago que se haya utilizado.

Esto ocurre porque no es posible relacionar directamente desde la vista ambas entidades. Ahora vamos a la solución.

Modificar argumentos para el filtro contextual de una vista

Para resolver este problema, necesitamos una forma de pasar información adicional al filtro contextual de la vista, de modo que podamos ajustar dinámicamente el comportamiento de los campos basado en la información específica de cada pedido. Afortunadamente, en Drupal contamos con ganchos (hooks) que nos permiten intervenir en el proceso de construcción de las vistas y realizar modificaciones según nuestras necesidades.

El código que se muestra a continuación es un ejemplo de cómo podemos utilizar el hook hook_views_pre_view() para agregar un argumento adicional al filtro contextual de una vista:

/**
 * Implements hook_views_pre_view().
 */
function MODULE_views_pre_view(ViewExecutable $view, $display_id, array &$args) {
  
  if ($view->id() == 'commerce_order_item_table') {
    $order = Order::load($args[0]);  // Get order object.
    $currency = $order->getTotalPrice()->getCurrencyCode();  // Get order currency code.
    $args[] = $currency;  // Add currency to contextual filter arguments.
  }
}

Este código se ejecuta antes de que se renderice la vista commerce_order_item_table. Lo que hace es cargar el objeto de pedido (Order) correspondiente al ID del pedido pasado como argumento al filtro contextual. Luego, obtiene la moneda asociada al pedido y la añade como un argumento adicional al filtro contextual de la vista.

Conclusion

Modificar argumentos para el filtro contextual de una vista en Drupal es una técnica poderosa que nos permite adaptar dinámicamente el comportamiento de nuestras vistas según las necesidades específicas de nuestro sitio web. En el ejemplo que hemos visto, pudimos resolver un problema relacionado con la visualización de información de entidades de Commerce ajustando el filtro contextual para tener en cuenta la moneda asociada a cada pedido. Con un entendimiento sólido de los hooks disponibles en Drupal y un poco de creatividad, podemos superar cualquier obstáculo que se presente en el desarrollo de nuestros proyectos.

Etiquetas

Únete a la Comunidad Drupal Sapiens

Guarda contenidos que te interesen, conecta con otras personas de la comunidad, contribuye para ganar premios y mucho más.

Inicia sesión o crea una cuenta aquí

Destacado

Últimas noticias