Inline Entity Form

Proporciona widgets para la gestión en línea (creación, modificación, eliminación) de entidades referenciadas dentro de los formularios de entidades padre.

inline_entity_form
140,038 sites
210
drupal.org

Overview

Inline Entity Form es un potente módulo de Drupal que permite la gestión en línea de entidades referenciadas directamente dentro de los formularios de entidades padre. El caso de uso principal son las relaciones padre-hijo (como producto display → productos, pedido → líneas de artículos, o nodo → contenido referenciado) donde las entidades hijas se gestionan principalmente en el contexto de su padre, en lugar de a través de formularios separados.

El módulo proporciona dos field widgets que pueden usarse con los tipos de campo entity_reference y entity_reference_revisions. El widget Simple muestra un formulario de entidad embebido en un fieldset, adecuado para campos requeridos de valor único con un solo bundle de destino. El widget Complex ofrece una interfaz completa basada en tabla con botones para añadir, editar, eliminar, duplicar y reordenar entidades referenciadas.

Las capacidades principales incluyen: crear nuevas entidades referenciadas en línea, editar entidades existentes sin abandonar el formulario padre, referenciar entidades existentes mediante autocompletado, comportamiento configurable de eliminación de entidades cuando se eliminan referencias, reordenación mediante arrastrar y soltar de referencias multi-valor, contenedores de formulario colapsables, soporte para form modes personalizados para diferentes diseños de formularios de entidad, creación automática de revisiones para entidades revisionables, y soporte completo multilingüe/traducción.

El módulo es altamente extensible a través de una arquitectura basada en handlers. Registra automáticamente un inline form handler para todos los tipos de entidad, con manejo especializado para nodes. Los desarrolladores pueden crear handlers personalizados para tipos de entidad específicos implementando InlineFormInterface. Varios hooks permiten a módulos y themes alterar formularios de entidad, formularios de referencia y visualizaciones de campos de tabla.

Features

  • Proporciona dos field widgets: Simple (valor único) y Complex (valores múltiples) para gestión de entidades en línea
  • Soporta los tipos de campo entity_reference y entity_reference_revisions
  • Crear nuevas entidades referenciadas directamente dentro del formulario de entidad padre sin navegar a otra página
  • Editar entidades referenciadas existentes en línea con soporte completo de formulario
  • Añadir entidades existentes mediante búsqueda por autocompletado con coincidencia configurable (STARTS_WITH o CONTAINS)
  • Duplicar entidades referenciadas existentes con un solo clic
  • Eliminar referencias de entidad con comportamiento de eliminación configurable (mantener siempre, eliminar siempre, o dejar que el usuario decida)
  • Reordenación mediante arrastrar y soltar de múltiples entidades referenciadas usando tabledrag
  • Contenedores de formulario colapsables y expandibles para reducir el desorden visual
  • Soporte para form modes personalizados permitiendo diferentes visualizaciones de formulario para edición en línea vs independiente
  • Creación automática de revisiones cuando está configurado para tipos de entidad revisionables
  • Soporte multilingüe completo con manejo automático de traducción para entidades en línea
  • Arquitectura basada en handlers permitiendo handlers de formulario en línea personalizados por tipo de entidad
  • Handler de formulario en línea especializado para nodes con visualización de estado publicado/no publicado
  • Soporte de migración de Drupal 7 a Drupal 8+ con mapeo automático de tipos de widget
  • Visualización de tabla extensible con soporte para tipos de columna label, field y callback
  • Sistema de hooks para alterar formularios de entidad, formularios de referencia y campos de tabla

Use Cases

Product Display con variaciones de producto (Commerce)

En Drupal Commerce, los product displays contienen variaciones de producto (diferentes tamaños, colores, etc.). Usar el widget IEF Complex en el campo de referencia de producto permite a los gestores de tienda crear y editar todas las variaciones directamente en el formulario del product display. Cada variación puede tener su propio precio, SKU y atributos, todo gestionado en línea sin navegar a formularios separados.

Gestión de líneas de artículos de pedido

Los pedidos de comercio electrónico contienen múltiples líneas de artículos. El widget IEF Complex permite a los administradores de pedidos añadir, editar o eliminar líneas de artículos directamente en el formulario del pedido. Esto es particularmente útil para pedidos telefónicos o ajustes manuales donde el formulario completo de línea de artículo necesita ser accesible.

Artículo con media embebido

Un tipo de contenido 'Artículo' tiene un campo entity reference a entidades 'Media'. Usando el widget IEF Simple, los editores pueden crear o editar el elemento media asociado directamente dentro del formulario del artículo. La opción colapsable mantiene el formulario limpio mientras proporciona capacidades completas de edición de media.

Relaciones de contenido padre-hijo

Al construir estructuras de contenido jerárquicas (como un Curso que contiene Lecciones), el widget IEF Complex en el campo de Lecciones permite a los editores de contenido gestionar todas las lecciones dentro del formulario del curso. La reordenación mediante arrastrar y soltar asegura que las lecciones puedan secuenciarse correctamente.

Construcción de contenido estilo Paragraphs

Aunque el módulo Paragraphs tiene su propio widget, IEF puede usarse con campos entity_reference_revisions para crear experiencias similares de construcción de contenido tipo párrafo. Cada tipo de párrafo obtiene su propio formulario en línea, y el contenido puede reordenarse y gestionarse dentro del padre.

Traducción de node con entidades en línea

Al traducir un node que contiene entidades en línea, IEF maneja automáticamente el flujo de trabajo de traducción. Si el padre se está traduciendo al francés, los formularios de entidad en línea mostrarán la traducción al francés (creándola si es necesario) respetando los ajustes de traducibilidad de campos.

Tips

  • Para el widget Simple, asegúrate de que el campo entity reference esté configurado con exactamente un bundle de destino para mejores resultados
  • Usa la opción 'Dejar que el usuario decida' para removed_reference cuando las entidades puedan estar referenciadas en otro lugar
  • Crea form modes dedicados para edición en línea para mostrar solo campos esenciales y reducir la complejidad del formulario
  • Al usar IEFs anidados (entidades en línea que a su vez tienen campos de entidad en línea), asegúrate de que el tipo/bundle de entidad padre difiera del hijo para prevenir recursión
  • El widget Complex funciona mejor con tabledrag para reordenación, pero tabledrag se desactiva automáticamente cuando un formulario de fila está abierto
  • Considera usar la opción colapsable para formularios en línea grandes para mejorar la usabilidad del formulario padre
  • La opción allow_existing es potente pero puede impactar el rendimiento en sitios grandes - usa coincidencia STARTS_WITH para mejor rendimiento
  • Usa hook_inline_entity_form_table_fields_alter para añadir columnas personalizadas como estado de inventario, precios u otros datos relevantes a la tabla de entidades

Technical Details

Hooks 3
hook_inline_entity_form_entity_form_alter

Permite a módulos y themes alterar el formulario de entidad antes de que se incluya en el widget IEF. Puede usarse para modificar elementos del formulario, añadir validación, cambiar visibilidad de campos, o añadir procesamiento personalizado.

hook_inline_entity_form_reference_form_alter

Permite a módulos y themes alterar el formulario de referencia (formulario de autocompletado para añadir entidades existentes) antes de que se incluya en el widget IEF. Útil para personalizar el campo de autocompletado o añadir campos adicionales.

hook_inline_entity_form_table_fields_alter

Permite a módulos alterar los campos mostrados en la tabla de entidades de IEF. Puede añadir nuevas columnas, eliminar existentes, o modificar configuraciones de columnas. Soporta tipos de columna label, field y callback.

Troubleshooting 6
El formulario en línea no aparece para el campo entity reference

Asegúrate de que el tipo de entidad tenga un inline form handler. Verifica que el widget esté correctamente seleccionado en los ajustes de visualización de formulario. Verifica que el usuario tenga permiso para crear/editar el tipo de entidad de destino.

El autocompletado de 'Añadir existente' no devuelve resultados

Verifica que existan entidades del tipo/bundle de destino y sean accesibles. Verifica los ajustes del selection handler en el campo que permiten las entidades esperadas. Comprueba si los permisos de visualización están correctamente configurados.

La entidad no se guarda cuando se envía el formulario padre

Asegúrate de que la propiedad #save_entity sea TRUE (por defecto) en el elemento inline_entity_form. Busca errores de validación en el formulario en línea que puedan estar previniendo el envío.

La traducción no funciona para entidades en línea

Verifica que el tipo de entidad de destino tenga la traducción habilitada. Comprueba que el campo de idioma esté configurado para traducción. Asegúrate de que el módulo content_translation esté habilitado para el tipo de entidad.

La entidad duplicada muestra los mismos datos que la original

Este es el comportamiento esperado - duplicar crea una copia con los mismos valores de campo. El duplicado obtendrá un nuevo ID cuando se guarde. Puede que necesites limpiar ciertos campos después de la duplicación usando hook_inline_entity_form_entity_form_alter.

El botón Eliminar no aparece para algunas entidades

Verifica el ajuste removed_reference y los permisos de acceso a entidad. Si está configurado como 'Eliminar siempre', los usuarios necesitan permiso de eliminación. También verifica que el campo no sea requerido sin forma de añadir entidades de reemplazo.

Security Notes 4
  • Se respeta el acceso a entidades - los usuarios solo pueden crear, editar o eliminar entidades para las que tienen permiso
  • El autocompletado para 'Añadir existente' respeta el acceso de visualización y las restricciones del selection handler
  • Cuando removed_reference está configurado como 'eliminar', verifica que los usuarios deban tener permiso implícito de eliminación a través del widget
  • La validación del token de formulario previene ataques CSRF en envíos de formularios en línea