Custom Field
Un tipo de campo multivalor flexible que almacena múltiples subcampos en una sola tabla de base de datos, proporcionando una alternativa de alto rendimiento a Paragraphs y las referencias de Entity.
custom_field
Install
composer require 'drupal/custom_field:^4.0'
Overview
Custom Field es un módulo de Drupal que permite crear campos dinámicos y multivalor con amplio soporte de plugins de Widget y Formatter. A diferencia de los enfoques tradicionales que requieren referencias de Entity o Paragraphs, Custom Field almacena todos los datos en una sola tabla de base de datos, lo que resulta en mejoras significativas de rendimiento al eliminar uniones innecesarias y reducir la complejidad de configuración.
El módulo proporciona un sistema completo de plugins para tipos de Field, Widgets y Formatters, permitiendo a los desarrolladores extender la funcionalidad fácilmente. Cada campo personalizado puede contener múltiples columnas (subcampos) de diferentes tipos, todos almacenados eficientemente en una tabla. Este enfoque es ideal para casos de uso donde se necesitan datos estructurados y multivalor sin la sobrecarga de entidades separadas.
Custom Field se integra con muchos módulos populares de Drupal incluyendo Feeds, Search API, GraphQL Compose, JSON:API, Linkit, Media Library, Entity Browser y el módulo AI, convirtiéndolo en una opción versátil para arquitecturas de contenido complejas.
Features
- Campos multivalor almacenados en una sola tabla de base de datos sin referencias de Entity para un rendimiento óptimo
- 26 tipos de subcampos integrados incluyendo string, text, integer, float, decimal, boolean, email, telephone, URI, link, datetime, daterange, time, time range, duration, file, image, color, map (clave-valor), entity reference, UUID y viewfield
- 39 plugins de Widget para subcampos incluyendo text, textarea, select, radios, checkboxes, autocomplete, selectores de fecha, cajas de color, carga de archivos e integración con Media Library
- 6 Formatters principales de Field: Default (theme hook personalizado), Inline, HTML List, Table, Flipped Table y Custom Template con soporte de tokens
- Sistema de diseño basado en CSS flexbox para disposición de Widgets en línea con puntos de interrupción responsivos
- Clonar configuraciones de Field desde cualquier campo personalizado existente en cualquier tipo de Entity
- Agregar o eliminar columnas a campos con datos existentes mediante comandos Drush o programáticamente
- Soporte de traducción a nivel de subcampo con integración de traducción de contenido
- Integración completa con Views con handlers personalizados de filtros, ordenamiento y argumentos
- Soporte de tokens para todos los subcampos con opciones de reemplazo de tokens básicas y avanzadas
- Integración con Feeds para importar datos a campos personalizados
- Restricciones de validación completas para links, valores de tiempo y otros tipos de Field
Use Cases
Especificaciones de Producto
Crea un campo personalizado con subcampos para peso, dimensiones, material, color y precio. Muestra como formateador de tabla para hojas de especificaciones de productos. Elimina la necesidad de campos separados o Paragraphs para cada especificación.
Información de Eventos
Usa el subcampo daterange con soporte de zona horaria, combinado con subcampos de ubicación (string), URL de entradas (link) y precio (decimal). El widget flexbox organiza estos elementos en línea, mientras que el formateador de tabla crea un listado de eventos limpio.
Tarjetas de Información de Contacto
Combina subcampos de nombre (string), correo electrónico (email), teléfono (telephone), sitio web (link) y foto (image). Usa el formateador inline para visualización compacta o el formateador predeterminado con tematización personalizada para tarjetas de contacto estilizadas.
Componentes de Dirección
Almacena calle, ciudad, estado, código postal y país como subcampos separados con validación apropiada. Clona configuraciones entre tipos de contenido para consistencia. Más eficiente que el módulo Address para casos de uso simples.
Metadatos de Galería de Medios
Adjunta metadatos a elementos de medios usando el subcampo image con pie de foto (string_long), fotógrafo (entity_reference a usuarios), fecha de captura (datetime) y ubicación (map para coordenadas).
Reemplazo de Paragraphs para Estructuras Simples
Para datos estructurados repetidos como perfiles de miembros del equipo, elementos de preguntas frecuentes o listas de características, los campos personalizados proporcionan mejor rendimiento que Paragraphs al eliminar la sobrecarga de Entity y simplificar las consultas.
Almacenamiento de Datos de API
Almacena datos de respuesta de API estructurados usando subcampos map, combinados con campos de marca de tiempo, estado y referencia. El submódulo JSON:API asegura la serialización adecuada para implementaciones headless.
Tips
- Usa la función 'Clone settings from' al crear nuevos campos personalizados para copiar la configuración de campos existentes, ahorrando tiempo significativo de configuración.
- Para mejor rendimiento con grandes conjuntos de datos, prefiere campos personalizados sobre Paragraphs cuando no necesitas las características completas de Entity como revisiones o moderación.
- El formateador Custom Template con soporte de tokens proporciona funcionalidad de reescritura similar a Views sin la sobrecarga de una View.
- Usa los comandos de Drush (cf-add-column, cf-remove-column) para modificar de forma segura la estructura de campos con datos existentes - los comandos preservan los datos automáticamente.
- Habilita 'Check empty' en subcampos que deberían activar la eliminación de filas cuando estén vacíos, previniendo elementos multivalor parcialmente llenos.
- El widget flexbox con configuración de columnas permite crear diseños de formulario similares a inline entity form sin módulos adicionales.
- Para referencias de Entity a medios, habilita el submódulo custom_field_media para obtener integración completa con Media Library.
- Usa el widget de selección jerárquica y el formateador para términos de taxonomía para mostrar y seleccionar términos con su ruta de jerarquía completa.
Technical Details
Hooks 2
hook_custom_field_link_attributes_alter
Permite a los módulos modificar los atributos de enlace disponibles
hook_custom_field_tags_alter
Permite a los módulos modificar las etiquetas HTML de envoltura disponibles
Drush Commands 2
drush custom_field:add-column
Añade interactivamente una nueva columna (sub-field) a un campo personalizado existente con preservación de datos
drush custom_field:remove-column
Elimina interactivamente una columna (sub-field) de un campo personalizado existente