Conditional Fields
Permite gestionar conjuntos de dependencias entre campos, haciendo que los campos dependientes sean visibles, obligatorios o tengan otros estados según los valores de los campos de control.
conditional_fields
Overview
Conditional Fields es un módulo potente que permite definir dependencias entre campos en cualquier tipo de Entity que soporte la Field API (Node, usuarios, términos de taxonomía, Media, Paragraphs, etc.). Cuando un campo se marca como "dependiente", solo estará disponible para edición y/o se mostrará según el estado de un campo "de control" (dependee) que coincida con las condiciones especificadas.
El módulo aprovecha la States API de Drupal para modificar dinámicamente los campos dependientes en el lado del cliente al editar entidades. Por ejemplo, puedes crear un campo personalizado "Article teaser" que solo aparezca cuando se marca una casilla "Has teaser". El módulo soporta configuraciones de dependencia complejas incluyendo múltiples condiciones combinadas con lógica AND, OR o XOR.
Conditional Fields proporciona un sistema flexible de plugins para manejar diferentes tipos de widgets de campo, permitiendo una evaluación precisa del estado en varios tipos de campos incluyendo campos de texto, listas de selección, casillas de verificación, botones de radio, campos de fecha, referencias a Entity y más. También soporta efectos visuales como animaciones de desvanecimiento y deslizamiento cuando los campos cambian de visibilidad.
Features
- Definir dependencias de campo basadas en valores del campo de control, estados (lleno/vacío, marcado/desmarcado, tocado/sin tocar, enfocado/desenfocado)
- Soporte para múltiples estados objetivo: visible/invisible, habilitado/deshabilitado, obligatorio/opcional, colapsado/expandido, marcado/desmarcado, lleno/vaciado
- Comportamiento dinámico de campos en el lado del cliente usando la States API de Drupal
- Múltiples modos de coincidencia de valores: valor exacto del widget, expresión regular, AND (todos los valores), OR (cualquier valor), XOR (exactamente un valor), NOT (ninguno de los valores)
- Efectos visuales para cambios de visibilidad: mostrar/ocultar instantáneo, aparecer/desvanecer, deslizar arriba/abajo con velocidad configurable
- Soporte para todos los tipos principales de Entity: Node, Media, Block content, comentarios, usuarios, términos de taxonomía y Paragraphs
- Integración con módulos contribuidos como Inline Entity Form, Paragraphs y Field Group
- Sistema de herencia que permite que las condiciones se propaguen a campos hijos dentro de campos contenedores
- Agrupación configurable de dependencias (AND, OR, XOR) cuando existen múltiples dependencias en un solo campo
- Soporte para selectores jQuery personalizados para casos de uso avanzados
- Restablecer campo dependiente a valores predeterminados cuando la dependencia no se activa
- Sistema de plugins para extender el soporte de manejadores de campo a tipos de campo personalizados
- Interfaz de administración conveniente con pestañas en las páginas de configuración de tipos de Entity
Use Cases
Mostrar campos adicionales según la selección del tipo de contenido
Crea un campo de selección 'Content Type' con opciones como 'Article', 'Event', 'Product'. Configura conditional fields para mostrar campos específicos de eventos (Date, Location, Registration Link) solo cuando se selecciona 'Event', y campos específicos de productos (Price, SKU, Inventory) solo cuando se selecciona 'Product'.
Campos obligatorios según el estado de publicación
Haz que ciertos campos sean obligatorios solo cuando el contenido está siendo publicado. Por ejemplo, haz que el campo 'Featured Image' sea obligatorio solo cuando la casilla 'Promote to front page' está marcada, asegurando que el contenido publicado siempre tenga imágenes apropiadas.
Revelación progresiva en formularios complejos
Usa conditional fields para crear formularios tipo asistente. Muestra primero los campos básicos, luego revela campos adicionales según las elecciones del usuario. Por ejemplo, muestra campos de pago solo después de que un usuario seleccione una opción de membresía de pago.
Grupos de campos condicionales con herencia
Configura un grupo de campos que contenga múltiples campos relacionados para que aparezca/se oculte según un único campo de control. Usa la función de herencia para propagar la condición de visibilidad a todos los campos dentro del grupo con una única configuración de dependencia.
Validación de múltiples pasos con requisitos condicionales
Haz que los campos sean obligatorios condicionalmente según otras selecciones. Por ejemplo, si 'Contact Method' está configurado como 'Email', haz que el campo de correo electrónico sea obligatorio; si está configurado como 'Phone', haz que el campo de número de teléfono sea obligatorio en su lugar.
Ocultar opciones no aplicables en campos de referencia a entidades
Usa conditional fields para mostrar u ocultar secciones completas de un formulario según las selecciones de entity reference. Por ejemplo, al seleccionar una categoría específica en una referencia de taxonomy, muestra campos relevantes solo para esa categoría.
Contenido condicional basado en Paragraphs
Dentro de los tipos de paragraph, crea campos condicionales que muestren diferentes opciones según la configuración del paragraph. Por ejemplo, en un tipo de paragraph 'Media', muestra campos de URL de video cuando se selecciona 'Video' y campos de carga de imagen cuando se selecciona 'Image'.
Tips
- Usa la opción 'Insert value from widget' cuando sea posible, ya que proporciona la coincidencia de valores más precisa al usar el widget de campo real para la entrada.
- Al configurar múltiples dependencias en el mismo campo, considera cuidadosamente la agrupación (AND/OR/XOR) para lograr la lógica deseada.
- Para formularios complejos, prueba las dependencias exhaustivamente con diferentes combinaciones de valores para asegurar que todos los escenarios funcionen como se espera.
- Usa las herramientas de desarrollador del navegador para inspeccionar el array #states generado si las dependencias no funcionan como se espera.
- Recuerda que los campos condicionales solo afectan la visualización del formulario; la validación del lado del servidor y el almacenamiento de campos se manejan por separado.
- Para tipos de paragraph, siempre configura las dependencias en el formulario de edición del tipo de paragraph, no desde el tipo de entidad padre.
- Usa la función de herencia para grupos de campos para reducir el número de dependencias individuales que necesitas configurar.
- Al usar expresiones regulares, pruébalas tanto en entornos PHP como JavaScript ya que la sintaxis puede diferir ligeramente.
- Considera usar la opción 'Reset to default values' para campos que deben limpiarse cuando su dependencia ya no se cumple.
- El módulo respeta el sistema de permisos de Drupal; asegúrate de que los usuarios tengan los permisos apropiados para ver y gestionar campos condicionales.
Technical Details
Admin Pages 10
/admin/structure/conditional_fields
Página principal de administración que lista todos los tipos de entidad que admiten campos condicionales. Haga clic en un tipo de entidad para ver sus bundles y configurar las dependencias de campos.
/admin/structure/conditional_fields/{entity_type}
Lista todos los bundles (tipos de contenido, tipos de medios, etc.) para el tipo de entidad seleccionado. Haga clic en un bundle para configurar sus dependencias de campos.
/admin/structure/conditional_fields/{entity_type}/{bundle}
Configure las dependencias de campos condicionales para un bundle de entidad específico. Vea las dependencias existentes y añada nuevas. Cada dependencia define un campo objetivo (dependiente) que reacciona a un campo de control (dependee) según las condiciones especificadas.
/admin/structure/conditional_fields/{entity_type}/{bundle}/{field_name}/{uuid}/edit
Formulario de configuración detallada para una dependencia de campo específica. Configure los valores exactos de la condición, los efectos visuales y las opciones avanzadas.
/admin/structure/types/manage/{node_type}/conditionals
Pestaña en la página de edición del tipo de Node para administrar las dependencias de campos condicionales para este tipo de contenido.
/admin/structure/media/manage/{media_type}/conditionals
Pestaña en la página de edición del tipo de Media para administrar las dependencias de campos condicionales para este tipo de medio.
/admin/structure/block/manage/block-content/{block_content_type}/conditionals
Pestaña en la página de edición del tipo de Block personalizado para administrar las dependencias de campos condicionales para este tipo de bloque.
/admin/structure/comment/manage/{comment_type}/conditionals
Pestaña en la página de edición del tipo de comentario para administrar las dependencias de campos condicionales para este tipo de comentario.
/admin/config/people/accounts/conditionals
Pestaña en la página de configuración de cuentas de usuario para administrar las dependencias de campos condicionales para perfiles de usuario.
/admin/structure/paragraphs_type/{paragraphs_type}/conditionals
Pestaña en la página de edición del tipo de Paragraph para administrar las dependencias de campos condicionales para este tipo de párrafo. Requiere el módulo Paragraphs.
Permissions 3
Hooks 8
hook_conditional_fields
Construye una lista de campos disponibles para la configuración de campos condicionales. Permite a los módulos registrar pseudo-campos (como los de Field Group) que no son campos estándar de Field API.
hook_conditional_fields_alter
Altera la lista de campos disponibles para la configuración de campos condicionales. Se utiliza para modificar, ordenar o filtrar la lista de campos.
hook_conditional_fields_children
Devuelve una lista de campos contenidos dentro de un campo padre dado. Utilizado por módulos que proporcionan campos contenedores (como Field Group, Paragraphs) para habilitar la herencia de configuraciones condicionales.
hook_conditional_fields_children_alter
Altera la lista de campos contenidos dentro de un campo padre. Permite la modificación de la lista de campos hijos para propósitos de herencia.
hook_conditionalFieldsStates_alter
Altera la lista de estados disponibles que pueden aplicarse a los campos dependientes.
hook_conditionalFieldsConditions_alter
Altera la lista de condiciones disponibles para evaluar dependencias.
hook_conditionalFieldsEffects_alter
Altera la lista de efectos visuales disponibles para los cambios de estado.
hook_conditional_fields_priority_field_alter
Altera la lista de tipos de campo que tienen prioridad para el procesamiento de dependencias. Se utiliza para campos como datelist que requieren un manejo especial.
Troubleshooting 6
Asegúrate de que el formulario se reconstruya correctamente después de las llamadas AJAX. La biblioteca conditional_fields necesita estar adjunta al formulario. Verifica que los behaviors de Drupal se activen correctamente en el contenido AJAX. Si usas AJAX personalizado, asegúrate de que drupalSettings.conditionalFields esté actualizado.
El módulo elimina automáticamente la validación de obligatoriedad de los campos ocultos. Si aún ves errores, verifica que el campo esté correctamente configurado con un estado de visibilidad. También verifica que la dependencia se evalúe antes de la validación del formulario revisando el orden de #after_build del formulario.
Asegúrate de que las dependencias estén configuradas en el tipo de paragraph mismo, no en la entidad padre. Para paragraphs, navega a la pestaña 'Manage dependencies' del tipo de paragraph específico. También verifica que el modo de formulario del widget de paragraph coincida con donde están configuradas las dependencias.
Verifica que la sintaxis del selector sea jQuery válido. Prueba el selector primero en la consola del navegador. Recuerda usar el marcador de posición %lang para campos traducibles y %key para componentes de campos de múltiples valores. El selector debe apuntar al input real del formulario, no a su contenedor.
Verifica que la biblioteca conditional_fields/conditional_fields esté cargada. Verifica que no haya errores de JavaScript en la consola. Los efectos solo funcionan con estados visible/!visible. Asegúrate de que la velocidad del efecto sea un número válido en milisegundos.
Verifica la configuración de la condición. Para estados como 'visible when checked', el inverso '!visible when unchecked' debería funcionar automáticamente. Si usas condiciones de valor, asegúrate de que todos los valores posibles estén contemplados en tu lógica.