Comment modifier ou supprimer une erreur de formulaire produite par Drupal ou un autre module sur 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."
Si vous souhaitez rendre un champ non obligatoire, utilisez une implémentation hook_form_alter () normale:
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_node_form_alter(&$form, &$form_state) {
$node = $form['#node'];
if ($node->type == 'my_custom_type') {
$form['title']['#required'] = FALSE;
}
}
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.'));
}
}
Étant donné que la chaîne utilisée pour ce message d'erreur est "! 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 lorsqu'il est '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 propriété #required
Sur FALSE
et Drupal n'affichera pas ce message d'erreur.
Pour drupal 7 vous pouvez télécharger ce module http://drupal.org/node/120945 en Zip cela vous donnera ce crochet.
message_alter(&$messages) {
}
Vous pouvez personnaliser les messages d'erreur de formulaire en utilisant 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 à configurer 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 à partir d'un champ entity_autocomplete qui faisait référence aux utilisateurs. Si un utilisateur non valide était ajouté, l'erreur de validation indiquait "Aucune entité ne correspond à% name". Au lieu du mot "entités", je voulais lui faire dire " 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:
/**
* Implements hook_form_alter().
*/
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (in_array($form_id, ['whatever_form_id_you_need_to_alter'])) {
// Add entity autocomplete custom form validation messages alter.
array_unshift($form['#validate'], 'my_module_custom_user_validate');
}
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 replace
if (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);
}
}
}
}
}
J'espère que cela t'aides!