¿Cómo se altera o elimina un error de formulario producido por Drupal u otro módulo en el nodo insertar / guardar, para un tipo de contenido en particular? Estoy buscando un método que pueda usar en un módulo.
He intentado hook_node_validate () , pero todo lo que pude hacer fue obtener errores y establecer errores.
Los formularios tienen funciones de validación especificadas en la $form['#validate']matriz. Y los elementos de formulario tienen funciones especificadas en $form['element_key']['#element_validate'].
Puedes especificar el tuyo así:
/**
* Implements hook_form_FORM_ID_alter().
*/function mymodule_form_node_form_alter(&$form,&$form_state){
$form['title']['#element_validate'][]='mymodule_validate_node_title';}/**
* Validate the node title to prevent ALL CAPS.
*/function mymodule_validate_node_title($element,&$form_state, $form){if(preg_match('/^[A-Z]+$/', $element['#value'])){
form_error($element, t('You may not enter titles in ALL CAPS.'));}}
¡Gran respuesta! ¿Cómo cambiaría el texto de error de "Se requiere el campo de título"? (como se muestra en la pregunta)? Eso es sin usar anulaciones de cadenas.
timofey.com
En otras palabras, no quiero agregar validación, solo quiero modificar el mensaje de error de una validación existente ... ¿tal vez desarmar la validación existente y agregar una nueva?
timofey.com
1
La validación existente no es una función de devolución de llamada de validación; es solo que el campo es "obligatorio". Una combinación de mis dos últimos anteriores eliminaría el mensaje existente y luego agregaría otro tipo de validación.
pjcdawkins
Solo necesito cambiar un mensaje de validación. Aunque he implementado la solución anterior (por hook_form_alter). Recibo dos mensajes de validación. 1 por defecto y el segundo que he escrito. Cualquier sugerencia @pjcdawkins
innovador
6
Como la cadena utilizada para ese mensaje de error es "se requiere un campo de nombre". usar el módulo String Overrides o cambiar la cadena para usar en el archivo settings.php tendría el efecto de cambiar la cadena utilizada para cada campo de formulario requerido.
Si desea modificar la cadena de error que se muestra para el título cuando no se ha ingresado el título, puede:
Agregue un controlador de validación de formulario al formulario de edición de nodos, utilizando hook_form_alter()
En ese formulario, el controlador de validación:
Verifique el contenido de $form['title'](donde $formse establece usando $form = &drupal_static('form_set_error', array());, y cámbielo a la cadena que desee cuando esté'Title field is required.'
Verifique $_SESSION['messages']['error'](una matriz) contiene la cadena 'Title field is required.'y cámbiela a la cadena que desea mostrar
Evitar mostrar el error es más fácil: solo configure la #requiredpropiedad FALSEy Drupal no mostrará ese mensaje de error.
Gracias. Probablemente no sea una buena idea usar un módulo no compatible, ¡pero puede usarse como guía!
timofey.com
1
Puede personalizar los mensajes de error de formulario utilizando la validación de campo por campo de entidad.
Para hacerlo, edite la configuración del campo, vaya a Validación y agregue una nueva regla de validación ( Campo obligatorio ). Allí, debe tener un campo de texto para configurar un mensaje de error personalizado para ese campo.
Para Drupal 8, pude agregar una función de validación personalizada que en realidad puede examinar los errores existentes y cambiar el marcado de los errores según cada caso. En mi caso, quería alterar el mensaje de error de un campo entity_autocomplete que hacía referencia a los usuarios. Si se agregó un usuario no válido, el error de validación decía: "No hay entidades que coincidan con% name". En lugar de la palabra "entidades", quería que dijera "usuarios", para ser menos aterrador y potencialmente confuso para los usuarios.
Primero, uso hook_form_alter () para agregar mi función de validación:
Luego, en la función 'my_module_custom_user_validate':
/**
* Custom form validation handler that alters default validation.
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/function my_module_custom_user_validate(&$form,FormStateInterface $form_state){// Check for any errors on the form_state
$errors = $form_state->getErrors();if($errors){foreach($errors as $error_key => $error_val){// Check to see if the error is related to the desired field:if(strpos($error_key,'the_entity_reference_field_machine_name')!== FALSE){// Check for the word 'entities', which I want to replaceif(strpos($error_val->getUntranslatedString(),'entities')== TRUE){// Get the original args to pass into the new message
$original_args = $error_val->getArguments();// Re-construct the error
$error_val->__construct("There are no users matching the name %value", $original_args);}}}}}
Como la cadena utilizada para ese mensaje de error es "se requiere un campo de nombre". usar el módulo String Overrides o cambiar la cadena para usar en el archivo settings.php tendría el efecto de cambiar la cadena utilizada para cada campo de formulario requerido.
Si desea modificar la cadena de error que se muestra para el título cuando no se ha ingresado el título, puede:
hook_form_alter()
En ese formulario, el controlador de validación:
$form['title']
(donde$form
se establece usando$form = &drupal_static('form_set_error', array());
, y cámbielo a la cadena que desee cuando esté'Title field is required.'
$_SESSION['messages']['error']
(una matriz) contiene la cadena'Title field is required.'
y cámbiela a la cadena que desea mostrarEvitar mostrar el error es más fácil: solo configure la
#required
propiedadFALSE
y Drupal no mostrará ese mensaje de error.fuente
Para drupal 7 puede descargar este módulo http://drupal.org/node/1209450 en zip que le dará este gancho.
fuente
Puede personalizar los mensajes de error de formulario utilizando la validación de campo por campo de entidad.
Para hacerlo, edite la configuración del campo, vaya a Validación y agregue una nueva regla de validación ( Campo obligatorio ). Allí, debe tener un campo de texto para configurar un mensaje de error personalizado para ese campo.
fuente
Para Drupal 8, pude agregar una función de validación personalizada que en realidad puede examinar los errores existentes y cambiar el marcado de los errores según cada caso. En mi caso, quería alterar el mensaje de error de un campo entity_autocomplete que hacía referencia a los usuarios. Si se agregó un usuario no válido, el error de validación decía: "No hay entidades que coincidan con% name". En lugar de la palabra "entidades", quería que dijera "usuarios", para ser menos aterrador y potencialmente confuso para los usuarios.
Primero, uso hook_form_alter () para agregar mi función de validación:
Luego, en la función 'my_module_custom_user_validate':
¡Espero que esto ayude!
fuente