Unique Field AJAX

Un módulo ligero que impone valores únicos para campos específicos con validación opcional en tiempo real basada en AJAX.

unique_field_ajax
1,262 sites
38
drupal.org

Instalar

Drupal 11, 10, 9, 8 v2.2.3
composer require 'drupal/unique_field_ajax:^2.2'

Overview

El módulo Unique Field AJAX permite a los administradores requerir que el contenido proporcionado para campos específicos sea único dentro del mismo bundle de contenido. Esto es particularmente útil para campos como códigos de producto, números de serie, direcciones de correo electrónico o cualquier campo donde se deban evitar valores duplicados.

El módulo proporciona verificación de unicidad flexible con opciones para unicidad por idioma, coincidencia con o sin distinción entre mayúsculas y minúsculas, y retroalimentación de validación en tiempo real basada en AJAX. Los administradores pueden personalizar los mensajes de error y advertencia utilizando tokens para mostrar enlaces al contenido existente con valores duplicados.

Además de los campos estándar, el módulo también admite la imposición de títulos únicos para tipos de contenido a través del formulario de configuración del tipo de contenido. Toda la configuración se realiza a través de la interfaz de configuración de campos existente, sin requerir páginas de administración adicionales.

Features

  • Imponer valores únicos para campos de valor único dentro del mismo bundle de contenido
  • Verificación de unicidad por idioma: permite el mismo valor en diferentes versiones de idioma mientras previene duplicados dentro del mismo idioma
  • Validación en tiempo real basada en AJAX que verifica la unicidad mientras los usuarios escriben, mostrando retroalimentación inmediata antes del envío del formulario
  • Opciones de coincidencia con o sin distinción entre mayúsculas y minúsculas para campos basados en texto
  • Modo opcional 'No imponer unicidad' que muestra advertencias pero aún permite guardar valores duplicados
  • Mensajes de error y advertencia personalizables con soporte de tokens: %link (muestra enlace a la entidad existente) y %label (muestra la etiqueta del campo)
  • Imposición de título único para tipos de contenido a través del formulario de configuración del tipo de contenido
  • Soporte para múltiples tipos de campo: string, string_long, list_string, text, email, entity_reference, path, uri, link, integer, decimal y color_field_type
  • Extensible mediante hooks que permiten a los desarrolladores modificar las consultas y resultados de unicidad
  • No requiere tablas de base de datos adicionales ni entidades de configuración: utiliza el sistema de configuración de terceros de Drupal

Use Cases

SKUs de productos únicos

Un sitio de comercio electrónico necesita asegurar que cada producto tenga un SKU (Unidad de Mantenimiento de Stock) único. Configure el campo SKU con unicidad habilitada para prevenir entradas duplicadas. Use coincidencia con distinción de mayúsculas/minúsculas si SKUs como 'ABC-123' y 'abc-123' deben tratarse como productos diferentes, o sin distinción si deben considerarse duplicados.

Direcciones de correo electrónico únicas para perfiles de usuario

Un sitio de membresía almacena direcciones de correo electrónico adicionales en un campo personalizado en los perfiles de usuario. Habilite la unicidad en este campo de correo electrónico para asegurar que dos miembros no compartan el mismo correo de contacto. El mensaje de error personalizado puede configurarse como 'Esta dirección de correo electrónico ya está asociada con otra cuenta.'

Títulos de artículos únicos por idioma

Un sitio de noticias multilingüe quiere prevenir títulos de artículos duplicados dentro del mismo idioma mientras permite que el mismo título se use en diferentes traducciones. Habilite la opción 'Por idioma' para permitir 'Últimas noticias' tanto en versiones en inglés como en español mientras previene dos artículos en inglés con el mismo título.

Imposición suave con mensajes de advertencia

Un flujo de trabajo de gestión de contenido donde los editores deben ser advertidos sobre contenido potencialmente duplicado pero aún tienen la capacidad de guardar si es necesario. Habilite 'No imponer unicidad' junto con validación AJAX. Los editores ven una advertencia como 'Ya existe contenido similar: %link' pero aún pueden guardar el contenido si determinan que no es realmente un duplicado.

Números de serie con validación en tiempo real

Una aplicación de manufactura rastrea productos por número de serie. Habilite la validación AJAX para que los trabajadores del almacén vean inmediatamente si un número de serie ya existe en el sistema mientras escriben, antes de enviar el formulario. Esto previene errores de entrada de datos y acelera el proceso de registro.

IDs de referencia externa únicos

Un escenario de integración donde el contenido se sincroniza desde un sistema externo usando identificadores únicos. Configure un campo de texto para almacenar el ID externo y habilite la unicidad para prevenir la importación accidental de registros duplicados. Use hook_query_unique_field_ajax_alter para agregar condiciones adicionales como verificar solo contra contenido publicado.

Tips

  • Use validación AJAX para la mejor experiencia de usuario: los usuarios reciben retroalimentación inmediata sin esperar el envío del formulario.
  • El token %link en mensajes personalizados crea un enlace al contenido existente con el valor duplicado, ayudando a los usuarios a identificar y revisar el contenido existente.
  • La unicidad por idioma es particularmente útil para sitios multilingües donde el contenido traducido puede compartir legítimamente valores de campo como nombres de productos.
  • La opción 'No imponer unicidad' combinada con mensajes de advertencia personalizados es ideal para escenarios de validación suave donde los usuarios deben ser informados pero no bloqueados.
  • Use hook_query_unique_field_ajax_alter para agregar condiciones personalizadas como verificar solo contenido publicado o contenido dentro de rangos de fechas específicos.
  • Exporte su configuración de campo para mantener la configuración de unicidad en control de versiones: la configuración se almacena como configuración de terceros en la configuración del campo.
  • Para la creación programática de entidades, la validación de unicidad aún se aplica durante la validación de la entidad: use \$entity->validate() para verificar antes de guardar.

Technical Details

Admin Pages 2
Formulario de edición de tipo de contenido - Configuración de título único /admin/structure/types/manage/{node_type}

Configurar la imposición de título único para un tipo de contenido. Cuando está habilitado, los títulos de nodo deben ser únicos dentro de este tipo de contenido. Esta sección aparece en las pestañas verticales del formulario de edición del tipo de contenido.

Configuración de campo - Configuración de campo único /admin/structure/types/manage/{node_type}/fields/{field_name}

Configurar la imposición de valor único para un campo específico. Esta sección aparece en las pestañas verticales del formulario de configuración del campo. Solo disponible para campos de valor único de tipos admitidos.

Hooks 2
hook_query_unique_field_ajax_alter

Permite a los módulos modificar la consulta de base de datos utilizada para verificar si un valor de campo es único. Este hook puede usarse para agregar condiciones adicionales, modificar condiciones existentes o cambiar completamente la lógica de unicidad.

hook_unique_field_ajax_unique_results_alter

Permite a los módulos modificar los resultados de la verificación de unicidad después de que se haya ejecutado la consulta. Esto puede usarse para anular el resultado de unicidad basándose en lógica personalizada.

Troubleshooting 6
La verificación de unicidad no funciona para campos de múltiples valores

El módulo solo admite campos de valor único. Los campos de múltiples valores (cardinalidad > 1) no pueden configurarse para unicidad. Cambie la cardinalidad del campo a 1 en la configuración de almacenamiento del campo si se requiere unicidad.

La validación AJAX muestra error pero el formulario aún se envía

Si 'No imponer unicidad' está habilitado, la validación AJAX mostrará advertencias en lugar de errores, y el formulario aún podrá enviarse. Deshabilite esta opción si desea prevenir completamente los envíos duplicados.

La configuración de campo único no aparece para mi tipo de campo

El módulo solo admite tipos de campo específicos: string, string_long, list_string, text, email, entity_reference, path, uri, link, integer, decimal y color_field_type. Otros tipos de campo no son compatibles.

La coincidencia sin distinción de mayúsculas/minúsculas no funciona como se esperaba

Por defecto, el módulo usa coincidencia sin distinción de mayúsculas/minúsculas. Si ve comportamiento con distinción, verifique si 'Distinguir mayúsculas/minúsculas' está habilitado en la configuración del campo. También tenga en cuenta que la intercalación predeterminada de MySQL puede afectar la sensibilidad a mayúsculas/minúsculas: asegúrese de que la intercalación de su base de datos coincida con sus expectativas.

La unicidad se verifica globalmente en lugar de por tipo de contenido

El módulo impone unicidad dentro del mismo bundle (tipo de contenido). Si ve validación entre bundles, asegúrese de estar probando dentro del mismo tipo de contenido. El módulo agrega una condición de bundle a la consulta automáticamente.

El mensaje de error no muestra el enlace al contenido existente

El token %link solo funciona si el usuario actual tiene acceso de visualización a la entidad existente con el valor duplicado. Si el usuario no tiene acceso, se mostrará 'Entidad desconocida' en su lugar.