Views Data Export
Exporta los resultados de Views a varios formatos de archivo incluyendo CSV, JSON, XML y XLS/XLSX con soporte para procesamiento por lotes de grandes conjuntos de datos.
views_data_export
Install
composer require 'drupal/views_data_export:8.x-1.8'
Overview
El módulo Views Data Export extiende el módulo Views de Drupal para permitir la exportación de resultados de vistas a múltiples formatos de archivo. Proporciona un plugin de visualización dedicado "Data export" que puede adjuntarse a visualizaciones de Views existentes, permitiendo a los usuarios descargar datos filtrados y ordenados en su formato preferido.
El módulo soporta dos métodos de exportación: Estándar (solicitud única, adecuado para conjuntos de datos pequeños) y Lotes (procesa datos en fragmentos, ideal para exportaciones grandes que excedan 2000 filas). El procesamiento por lotes previene el agotamiento de memoria y los tiempos de espera del servidor al exportar grandes cantidades de datos.
Las capacidades clave incluyen nombre de archivo configurable con soporte de tokens, descarga automática de archivos tras completar la exportación, opciones flexibles de redirección después de completar el lote, e integración con los módulos Facets y Search API. El módulo también proporciona un comando Drush para exportaciones programáticas y soporta personalización a través de hooks.
Features
- Exporta datos de Views a formato CSV mediante el módulo csv_serialization con delimitador, delimitador de texto, carácter de escape, eliminación de HTML, recorte de espacios en blanco, codificación y opciones de BOM configurables
- Exporta datos de Views a formato JSON usando la serialización integrada de Drupal
- Exporta datos de Views a formato XML con opciones configurables de codificación, nombre del nodo raíz, nombre del nodo de elemento y salida con formato legible
- Exporta datos de Views a formatos Microsoft Excel XLS/XLSX mediante el módulo opcional xls_serialization
- Método de exportación estándar para conjuntos de datos pequeños procesados en una única solicitud HTTP
- Método de exportación por lotes para conjuntos de datos grandes (>2000 filas) que procesa datos en tamaños de lote configurables para prevenir el agotamiento de memoria
- Límite de exportación configurable para restringir el número máximo de filas exportadas
- Adjunta iconos de exportación de datos a otras visualizaciones de Views (Page, Block) para fácil acceso del usuario
- Soporte de tokens en nombres de archivo para nomenclatura dinámica basada en el contexto de la vista y tokens de fecha
- Opción de descarga automática que activa la descarga del archivo inmediatamente después de completar la exportación
- Configuración flexible de redirección después de completar el lote: ruta personalizada, visualización específica o página principal
- Opción de preservación de parámetros de consulta para mantener los filtros al redirigir después de la exportación
- Opciones de almacenamiento de archivos privado y público para controlar el acceso a los archivos de exportación generados
- Integración con el módulo Facets para respetar las selecciones de facetas en vistas de Search API durante la exportación
- Integración del plugin de visualización de Search API para el manejo adecuado de vistas basadas en Search API
- Comando Drush (vde) para exportaciones programáticas y programadas desde la línea de comandos
- Personalización a nivel de fila mediante el hook hook_views_data_export_row_alter()
- Soporte de ordenación por clic en datos exportados manteniendo la funcionalidad de ordenación de tabla
Use Cases
Exportar Datos de Usuario para Solicitudes de Cumplimiento
Crea una Vista de cuentas de usuario con campos relevantes (nombre de usuario, correo electrónico, fecha de registro, roles). Añade una visualización Data export configurada para formato CSV con procesamiento por lotes. Establece el nombre de archivo a 'user-export-[date:custom:Y-m-d].csv'. Los administradores pueden usar filtros expuestos para encontrar usuarios específicos y descargar sus datos para solicitudes de GDPR o cumplimiento.
Informes Programados de Auditoría de Contenido
Configura una Vista mostrando contenido con campos como título, autor, fecha de creación y estado. Añade una visualización Data export con formato CSV y procesamiento por lotes habilitado. Usa el comando Drush en un trabajo cron: 'drush vde content_audit data_export --output-file=/var/reports/content-$(date +%Y%m%d).csv' para generar informes de auditoría diarios automáticamente.
Integración de Exportación de Pedidos de E-commerce
Crea una Vista de pedidos de comercio con información del cliente, líneas de artículos y totales. Configura Data export con formato CSV usando delimitador de punto y coma para compatibilidad con Excel europeo. Habilita la opción 'Solo usar el método encode de Symfony serializer' para mejor rendimiento en grandes conjuntos de datos de pedidos. El personal puede exportar pedidos filtrados para sistemas de contabilidad.
Exportación de Resultados de Search API con Facetas
Para una Vista de catálogo de productos basada en Search API, añade una visualización Data export. Configura la opción Fuente de faceta para que coincida con la fuente de faceta de la visualización de página adjunta. Los usuarios pueden aplicar filtros de faceta (categoría, rango de precio, atributos) en la visualización de página, y la exportación respetará todas las facetas seleccionadas al generar el CSV.
Generación de Feed XML para Sistemas Externos
Configura una visualización Data export con formato XML para sindicación de contenido. Establece root_node_name ('products') e item_node_name ('product') personalizados para coincidir con los requisitos del sistema consumidor. Habilita pretty-print para salida legible durante el desarrollo. El feed XML resultante puede ser consumido por sistemas externos de inventario o catálogo.
Página de Descarga Multi-formato
Crea una Vista de página con filtros expuestos para un panel de datos. Añade múltiples visualizaciones Data export - una para CSV, una para JSON, una para XML. Adjunta las tres a la visualización de página. Los usuarios ven múltiples iconos de descarga y pueden elegir su formato preferido mientras usan los mismos criterios de filtro.
Tips
- Para exportaciones muy grandes (más de 100k filas), considera reducir el tamaño de lote a 500 y aumentar el memory_limit de PHP para prevenir errores de memoria insuficiente durante las operaciones de PhpSpreadsheet para formato XLS.
- Usa reemplazos de token como [date:custom:Ymd-His] en nombres de archivo para crear archivos únicos para cada exportación y prevenir problemas de caché.
- Configura el almacenamiento de archivos privado para exportaciones de datos sensibles para asegurar que los archivos solo sean accesibles para usuarios autorizados a través del control de acceso de Drupal.
- Al usar el modo por lotes, siempre añade un criterio de ordenación único (como ID de nodo ascendente) para asegurar resultados consistentes a través de las iteraciones de lote.
- La opción 'Solo usar el método encode de Symfony serializer' puede mejorar significativamente el rendimiento de exportación CSV pero solo funciona con estructuras de datos planas - evitar con entidades referenciadas o campos multivalor.
- Prueba la funcionalidad de exportación con un pequeño conjunto de datos primero antes de ejecutar en datos de producción para verificar los mapeos de campos y opciones de formato.
- Para exportaciones programadas vía Drush, usa la opción --uid con una cuenta de administrador para asegurar que todo el contenido sea accesible independientemente del estado de publicación.
Technical Details
Hooks 1
hook_views_data_export_row_alter
Permite a los módulos alterar filas individuales antes de ser exportadas. Se llama durante el proceso de renderizado para cada fila en los resultados de la vista.
Drush Commands 1
drush views_data_export:views-data-export
Ejecuta una visualización de views_data_export y escribe la salida a stdout o un archivo. Soporta tanto el método de exportación estándar como por lotes.
Troubleshooting 8
Asegúrate de que el sistema de archivos privado esté correctamente configurado en settings.php con un file_private_path válido. Verifica que el servidor web tenga permisos de escritura en los directorios public:// y private://. Comprueba si se puede crear el subdirectorio views_data_export.
Ordena la vista por un campo identificador único (nid, uid o ID de entidad). Sin ordenación consistente, la paginación de lotes puede omitir o duplicar filas. Esto está documentado en el issue #3120563.
La descarga automática está intencionalmente deshabilitada para el formato JSON para evitar que los navegadores muestren datos JSON sin procesar. Los usuarios deben hacer clic manualmente en el enlace de descarga para exportaciones JSON.
Configura el delimitador CSV para que coincida con el separador de lista de tu configuración regional. Las versiones europeas de Excel pueden esperar punto y coma en lugar de comas. Habilita la opción BOM UTF-8 si los caracteres especiales aparecen corruptos.
Cambia del método de exportación Estándar al de Lotes. Establece el tamaño de lote entre 500-2000 filas dependiendo de los recursos del servidor. Habilita 'Solo usar el método encode de Symfony serializer' para exportaciones CSV de datos planos.
Asegúrate de que la configuración Fuente de faceta en la visualización de exportación de datos coincida con la fuente de faceta de la visualización de página a la que está adjunta. El formato del ID de fuente de faceta es típicamente 'search_api:views_page__VIEW_ID__DISPLAY_ID'.
Usa la opción --uid para ejecutar la exportación como un usuario con los permisos apropiados. El usuario anónimo o el usuario de Drush pueden no tener acceso al contenido que se está exportando.
Configura los ajustes de XML en las opciones de estilo. Establece la codificación a UTF-8 para caracteres internacionales. Personaliza root_node_name e item_node_name para que coincidan con los requisitos de tu esquema XML.
Security Notes 5
- Los archivos de exportación contienen datos potencialmente sensibles. Usa almacenamiento de archivos privado (private://) en lugar de público cuando exportes información de usuarios, pedidos u otro contenido confidencial.
- El módulo implementa hook_file_access() para restringir el acceso de descarga a archivos generados por la sesión de exportación del usuario actual. Sin embargo, los archivos en public:// son accesibles mediante URL directa.
- La opción --uid del comando Drush permite ejecutar exportaciones como cualquier usuario - restringe el acceso a la shell solo a administradores de confianza.
- Configura los permisos de acceso a la Vista apropiadamente ya que la exportación de datos hereda la configuración de acceso de la Vista. Los usuarios solo pueden exportar datos que pueden ver en la visualización adjunta.
- Ten precaución con la opción de descarga automática en entornos de computadoras compartidas o públicas ya que los archivos se descargan sin confirmación adicional.