Views Field View
Permite incrustar una View como campo dentro de otra View, habilitando relaciones jerárquicas entre vistas con paso de argumentos basado en tokens.
views_field_view
Overview
Views Field View es un potente módulo de extensión de Views que permite incrustar una View como campo dentro de otra View. Esto crea una relación padre-hijo entre vistas, donde la vista hija puede recibir argumentos contextuales desde campos o argumentos de la vista padre.
El módulo añade un nuevo tipo de campo llamado 'Global: View' a los manejadores de campos de Views. Cuando añades este campo a una vista (la vista "padre"), puedes seleccionar cualquier otra vista (la vista "hija") para que se muestre en cada fila de la vista padre. La vista hija puede aceptar valores de argumentos de la vista padre usando un sistema completo de tokens.
Esto es particularmente útil para crear relaciones de datos complejas, como mostrar contenido relacionado para cada elemento de una lista, mostrar jerarquías anidadas, o crear vistas tipo panel donde cada fila contiene datos resumidos de otra vista.
Features
- Incrustar cualquier View como campo dentro de otra View, creando relaciones padre-hijo entre vistas
- Sistema de paso de argumentos basado en tokens que soporta tanto valores de campo crudos como renderizados
- Soporte para tokens de filtros contextuales ({{ raw_arguments.X }} y {{ arguments.X }}) para pasar argumentos de la vista padre a las vistas hijas
- Soporte para tokens de campos ({{ raw_fields.X }} y {{ fields.X }}) para pasar valores de campos de la vista padre como argumentos de la vista hija
- Múltiples delimitadores de tokens soportados: coma (,) o barra diagonal (/) para separar múltiples argumentos
- Soporte para valores estáticos - pasar IDs fijos o términos de taxonomía directamente a las vistas hijas
- Protección contra recursión integrada para prevenir bucles infinitos cuando las vistas se referencian entre sí
- Reescritura automática de ID de paginador para asegurar que los paginadores de la vista hija funcionen correctamente dentro de las vistas padre
- Enlace directo para editar la configuración de la vista hija desde la configuración de campo de la vista padre
- Control de acceso - las vistas hijas solo se renderizan si el usuario actual tiene acceso al display seleccionado
- Integración de opción para ocultar vacío - suprime la salida cuando la vista hija no devuelve resultados
Use Cases
Mostrar contenido relacionado para cada elemento
Crear una vista padre listando artículos, e incrustar una vista hija mostrando contenido relacionado para cada artículo. Pasar el ID del nodo del artículo ({{ raw_fields.nid }}) al filtro contextual de la vista hija para mostrar elementos relacionados basados en términos de taxonomía u otras relaciones.
Panel de usuario con resumen de actividad
Construir una vista de usuarios con una vista hija incrustada mostrando la actividad reciente de cada usuario (comentarios, contenido creado, etc.). Pasar {{ raw_fields.uid }} para filtrar la vista hija y mostrar solo la actividad de ese usuario.
Listado de categorías con conteos o previsualizaciones de elementos
Crear una vista de listado de términos de taxonomía con una vista hija incrustada mostrando los últimos 3 nodos en cada categoría. Pasar el ID del término ({{ raw_fields.tid }}) a la vista hija para filtrar contenido por categoría.
Variantes de productos de comercio electrónico
Mostrar productos con vistas incrustadas mostrando variantes disponibles, niveles de precios o información de inventario. Pasar el ID del producto a las vistas hijas que muestran datos específicos de cada variante.
Navegación de contenido jerárquico
Construir estructuras de navegación anidadas donde una vista padre muestra elementos de nivel superior y las vistas hijas incrustadas muestran sub-elementos. Usar el ID o ruta del elemento padre como argumento para filtrar los hijos.
Informes de agregación multinivel
Crear informes resumidos donde la vista padre muestra agrupaciones (por fecha, categoría, usuario) y las vistas hijas proporcionan desgloses detallados o estadísticas para cada grupo.
Tips
- Posiciona los campos usados como tokens de argumentos ENCIMA del campo Global: View en la lista de campos, ya que Views procesa los campos en orden
- Usa 'Excluir de la visualización' en campos que solo se necesitan para pasar como tokens para evitar saturar la salida
- Usa tokens {{ raw_fields.X }} para datos más limpios (sin formato HTML) cuando pases IDs o valores como argumentos
- Usa tokens {{ fields.X }} cuando necesites la salida renderizada/formateada, pero ten en cuenta que esto incluye cualquier reescritura aplicada al campo
- Habilita el caché en las vistas hijas para mejorar el rendimiento, especialmente cuando la misma vista hija se incrusta múltiples veces
- Para lógica de argumentos compleja, considera usar Views PHP o código personalizado para preparar los valores de argumentos
- Prueba las vistas hijas independientemente con argumentos manuales antes de incrustarlas para asegurar que los filtros contextuales funcionen correctamente
- Usa el enlace 'Editar vista' en la configuración del campo para acceder y modificar rápidamente la configuración de la vista hija
- Cuando uses múltiples argumentos, asegúrate de que estén separados por comas o barras diagonales y en el orden correcto que coincida con los filtros contextuales de la vista hija
Technical Details
Hooks 1
hook_views_data_alter
Añade el manejador de campo 'view' a los datos globales de Views, haciendo que el campo 'Global: View' esté disponible en todas las vistas.
Troubleshooting 6
Esto ocurre cuando una vista intenta incrustarse a sí misma, creando un bucle infinito. Asegúrate de que tus vistas padre e hija sean diferentes, o que el display que se está incrustando no sea el mismo que el display actual. La protección contra recursión está funcionando según lo previsto.
Asegúrate de que los campos que estás usando como fuentes de tokens estén posicionados ENCIMA del campo Global: View en la lista de campos. Views procesa los campos en orden, por lo que los tokens de campos inferiores no están disponibles. También verifica que el formato del token coincida exactamente: {{ raw_fields.field_name }} o {{ fields.field_name }}.
Guarda la configuración del campo primero después de seleccionar la vista. Las opciones de display requieren que una vista válida sea seleccionada y guardada antes de que aparezcan debido al proceso de carga AJAX en dos pasos.
El módulo asigna automáticamente IDs de paginador únicos a las vistas hijas basándose en el índice de fila. Si múltiples vistas hijas por fila necesitan paginadores, puedes encontrar conflictos. Considera usar paginadores 'mini' o deshabilitar paginadores en las vistas hijas en favor de enlaces 'más'.
Cada fila en la vista padre ejecuta la consulta de la vista hija por separado. Habilita el caché en la vista hija (configuración de caché de Views), reduce el número de filas padre con paginadores, o considera usar agregación de Views en su lugar para conteos simples.
Verifica que el usuario actual tenga acceso al display de la vista hija. El módulo respeta los permisos de acceso de las vistas y no renderizará vistas a las que el usuario no pueda acceder.
Security Notes 4
- El módulo respeta los permisos de acceso de Views - las vistas hijas solo se renderizan si el usuario actual tiene acceso al display seleccionado
- Los argumentos de cadenas estáticas son escapados de HTML antes de pasarse para prevenir vulnerabilidades XSS
- La protección contra recursión está habilitada por defecto para prevenir denegación de servicio a través de bucles infinitos
- La configuración 'evil' solo debe ser habilitada por desarrolladores que entiendan las implicaciones de seguridad de permitir la incrustación recursiva de vistas