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
65,162 sites
172
drupal.org

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
Conditional Fields /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.

Lista de Bundles /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.

Administrar dependencias /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.

Editar dependencia /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.

Administrar dependencias (pestaña de tipo de Node) /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.

Administrar dependencias (pestaña de tipo de Media) /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.

Administrar dependencias (pestaña de tipo de Block) /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.

Administrar dependencias (pestaña de tipo de comentario) /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.

Administrar dependencias (pestaña de Usuario) /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.

Administrar dependencias (pestaña de tipo de Paragraph) /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
Ver Conditional fields

Permite a los usuarios ver las páginas de configuración de Conditional fields y ver las dependencias existentes.

Editar Conditional fields

Permite a los usuarios crear y modificar las dependencias de campos condicionales.

Eliminar Conditional fields

Permite a los usuarios eliminar las dependencias de campos condicionales.

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
Los campos condicionales no funcionan en formularios cargados por AJAX

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.

Errores de validación de campos obligatorios en campos ocultos

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.

Los estados no se aplican a campos de paragraphs anidados

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.

El selector jQuery personalizado no funciona

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.

Los efectos visuales (fade/slide) no se animan

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.

La dependencia funciona en una dirección pero no en la inversa

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.