Dans mon module Drupal 7, j'ai un formulaire et ses gestionnaires de validation. J'appelle mon formulaire à partir d'un field.tpl.php avec print render(drupal_get_form('my_form'))
; cela fonctionne comme prévu.
Le problème est en cas de mauvaise valeur d'entrée.
Il nécessite deux soumissions incorrectes avant d'afficher le message d'erreur: la première fois, il y a une bordure rouge autour de ma mauvaise entrée et la deuxième fois, le message d'erreur s'affiche (avec la bordure rouge).
Alors, quelle est la bonne façon d'utiliser form_set_error()
?
Les générateurs de formulaires ne sont pas censés être appelés dans un fichier de modèle, car ils sont appelés trop tard. Lorsque vous appelez render(drupal_get_form('my_form'))
, le code qui affiche les messages d'erreur a été exécuté et les éventuels messages d'erreur signalés par le gestionnaire de validation sont enregistrés dans la session en cours à partir de drupal_set_message () , qui est appelé depuis form_set_error()
.
Le code pour imprimer le message d'erreur se trouve dans le fichier page.tpl.php .
<?php if ($breadcrumb): ?>
<div id="breadcrumb"><?php print $breadcrumb; ?></div>
<?php endif; ?>
<?php print $messages; ?>
Le code dans drupal_set_message()
qui enregistre les messages à afficher est le suivant:
if ($message) {
if (!isset($_SESSION['messages'][$type])) {
$_SESSION['messages'][$type] = array();
}
if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
$_SESSION['messages'][$type][] = $message;
}
// Mark this page as being uncacheable.
drupal_page_is_cacheable(FALSE);
}
Vous devriez plutôt regarder form_set_error
si vous avez un élément comme celui-ci:
function my_custom_module_form() {
$form = array();
$form['my_element'] = array(
'#type' => 'textfield',
'#title' => 'My Text field',
'#default_value' => 'Some default text.',
);
return $form;
}
dans votre fonction de rappel de validation, effectuez cette opération si vous constatez que les valeurs de $form_state['values']
ne sont pas valides
function my_custom_module_form_validate($form, &$form_state) {
// Do some checking on $form_state['values'], if you don't like it.
form_set_error('my_element', 'This is the error message that will be displayed.');
}
form_set_error()
doit être appelé dans votre fonction hook_validate()
comme répondu par LSU_JBob.