Comment modifier ou supprimer une erreur de formulaire produite par Drupal ou un autre module lors de l'insertion / sauvegarde de noeud, pour un type de contenu particulier. Je recherche une méthode que je peux utiliser dans un module.
J'ai essayé hook_node_validate () , mais tout ce que j'ai pu faire est d'obtenir des erreurs et de définir des erreurs.
Pour modifier le texte d'une seule chaîne, la méthode la plus simple consiste à utiliser le module String Overrides. Cela vous permettrait de remplacer la chaîne:
"! Le champ nom est obligatoire."
avec (par exemple):
"Le champ '! Nom' est obligatoire."
Modification des champs de formulaire
Si vous souhaitez rendre un champ non obligatoire, utilisez une implémentation hook_form_alter () normale:
Les formulaires ont des fonctions de validation spécifiées dans le $form['#validate']tableau. Et les éléments de formulaire ont des fonctions spécifiées dans $form['element_key']['#element_validate'].
Vous pouvez spécifier le vôtre comme ceci:
/**
* 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.'));}}
Très bonne réponse! Comment procéderiez-vous pour changer le texte d'erreur de - "Le champ de titre est requis." (comme illustré dans la question)? C'est sans utiliser des remplacements de chaîne.
timofey.com
En d'autres termes, je ne veux pas ajouter de validation, je veux juste modifier le message d'erreur d'une validation existante .... peut-être annuler la validation existante et en ajouter une nouvelle?
timofey.com
1
La validation existante n'est pas une fonction de rappel de validation; c'est seulement que le champ est "obligatoire". Une combinaison de mes deux derniers ci-dessus supprimerait le message existant, puis ajouterait un autre type de validation.
pjcdawkins
Je dois modifier uniquement un message de validation. Bien que j'aie implémenté la solution ci-dessus (par hook_form_alter). Je reçois deux messages de validation. 1 un défaut et 2ème que j'ai écrit. Toute suggestion @pjcdawkins
innovant
6
Étant donné que la chaîne utilisée pour ce message d'erreur est «! Le champ de nom est obligatoire». l'utilisation du module String Overrides ou la modification de la chaîne à utiliser dans le fichier settings.php aurait pour effet de modifier la chaîne utilisée pour chaque champ de formulaire requis.
Si vous souhaitez modifier la chaîne d'erreur affichée pour le titre lorsque le titre n'a pas été saisi, vous pouvez:
Ajoutez un gestionnaire de validation de formulaire au formulaire de modification de nœud, en utilisant hook_form_alter()
Dans ce formulaire, gestionnaire de validation:
Vérifiez le contenu de $form['title'](où $formest défini à l'aide de $form = &drupal_static('form_set_error', array());et remplacez-le par la chaîne souhaitée'Title field is required.'
Vérifiez $_SESSION['messages']['error'](un tableau) contient la chaîne 'Title field is required.'et remplacez-la par la chaîne que vous souhaitez afficher
Il est plus facile d'éviter d'afficher l'erreur: définissez simplement la #requiredpropriété sur FALSEet Drupal n'affichera pas ce message d'erreur.
Merci. Ce n'est probablement pas une bonne idée d'utiliser un module non pris en charge, mais il peut être utilisé comme guide!
timofey.com
1
Vous pouvez personnaliser les messages d'erreur de formulaire à l'aide de la validation de champ par champ d'entité.
Pour ce faire, modifiez les paramètres de champ, accédez à Validation et ajoutez une nouvelle règle de validation ( champ obligatoire ). Là, vous devriez avoir un champ de texte pour configurer un message d'erreur personnalisé pour ce champ.
Pour Drupal 8, j'ai pu ajouter une fonction de validation personnalisée qui peut réellement examiner les erreurs existantes et modifier le balisage des erreurs au cas par cas. Dans mon cas, je voulais modifier le message d'erreur d'un champ entity_autocomplete qui faisait référence aux utilisateurs. Si un utilisateur non valide a été ajouté, l'erreur de validation indique "Aucune entité ne correspond à% name". Au lieu du mot «entités», je voulais qu'il dise «utilisateurs», pour être moins effrayant et potentiellement déroutant pour les utilisateurs.
Tout d'abord, j'utilise hook_form_alter () pour ajouter ma fonction de validation:
Ensuite, dans la fonction '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);}}}}}
Étant donné que la chaîne utilisée pour ce message d'erreur est «! Le champ de nom est obligatoire». l'utilisation du module String Overrides ou la modification de la chaîne à utiliser dans le fichier settings.php aurait pour effet de modifier la chaîne utilisée pour chaque champ de formulaire requis.
Si vous souhaitez modifier la chaîne d'erreur affichée pour le titre lorsque le titre n'a pas été saisi, vous pouvez:
hook_form_alter()
Dans ce formulaire, gestionnaire de validation:
$form['title']
(où$form
est défini à l'aide de$form = &drupal_static('form_set_error', array());
et remplacez-le par la chaîne souhaitée'Title field is required.'
$_SESSION['messages']['error']
(un tableau) contient la chaîne'Title field is required.'
et remplacez-la par la chaîne que vous souhaitez afficherIl est plus facile d'éviter d'afficher l'erreur: définissez simplement la
#required
propriété surFALSE
et Drupal n'affichera pas ce message d'erreur.la source
Pour drupal 7 vous pouvez télécharger ce module http://drupal.org/node/1209450 en zip il vous donnera ce crochet.
la source
Vous pouvez personnaliser les messages d'erreur de formulaire à l'aide de la validation de champ par champ d'entité.
Pour ce faire, modifiez les paramètres de champ, accédez à Validation et ajoutez une nouvelle règle de validation ( champ obligatoire ). Là, vous devriez avoir un champ de texte pour configurer un message d'erreur personnalisé pour ce champ.
la source
Pour Drupal 8, j'ai pu ajouter une fonction de validation personnalisée qui peut réellement examiner les erreurs existantes et modifier le balisage des erreurs au cas par cas. Dans mon cas, je voulais modifier le message d'erreur d'un champ entity_autocomplete qui faisait référence aux utilisateurs. Si un utilisateur non valide a été ajouté, l'erreur de validation indique "Aucune entité ne correspond à% name". Au lieu du mot «entités», je voulais qu'il dise «utilisateurs», pour être moins effrayant et potentiellement déroutant pour les utilisateurs.
Tout d'abord, j'utilise hook_form_alter () pour ajouter ma fonction de validation:
Ensuite, dans la fonction 'my_module_custom_user_validate':
J'espère que cela t'aides!
la source