it-swarm.it

Come impostare più messaggi di errore con form_set_error?

Ho notato che posso passare una variabile di messaggio a form_set_error().

Come posso passare più messaggi?

Ho provato a chiamare form_set_error () più volte, ma viene sempre visualizzato il primo.

Quindi, per riassumere, voglio mostrare qualcosa del genere:

  • errore 1
  • errore 2
  • errore 3

Attualmente, posso solo ottenere:

  • errore 1

Quindi, una volta che gli utenti lo correggono e lo reinoltrano, ottengono:

  • errore 2

    if (strpos ($ form_state ["valori"] ["corpo"], "

    if (strpos ($ form_state ["valori"] ["corpo"], "

Se entrambe queste istruzioni di controllo generano un errore, viene visualizzata solo la prima. Dopo che l'utente ha corretto l'errore, viene visualizzato il secondo messaggio di errore.

6
giorgio79

Vorrei modificare il codice per inviare una singola chiamata a form_set_error() per elemento:

$errors = array();
if (strpos($form_state["values"]["body"], "<h1") === true)
    $error_messages["body"][] = "Blalalabalbal bablalbabla.";

if (strpos($form_state["values"]["body"], "<h3") === false)
    $error_messages["body"][] = "Do this do that balbablalba.";

foreach ($error_messages as $element => $messages) {
    form_set_error($element, theme('item_list', array('items' => messages)));
}
10
janusman

Ho creato una funzione separata per questo:

function form_set_error_multiple($name = NULL, $messages = '', $limit_validation_errors = NULL) {
  return form_set_error('extra][items', implode('</li><li>', $messages));
}

E poi posso chiamarlo così:

$errors = array();
$errors[] = 'My element error';
$errors[] = 'Another error for the same element';

if ($errors) {
  form_set_error_multiple('my_element', $errors);
}
2
Rafal Enden

Stai passando il nome dell'elemento di input a form_set_error()?

In base al nome della funzione è possibile passare un messaggio per chiamata di funzione.

1
Codium

Ho risolto questo con un "hack":

$error_messages = "";
if (strpos($form_state["values"]["body"], "<h1") === true)
   $error_messages .= "Error Message on First Line <br/>";
}
if (strpos($form_state["values"]["body"], "<h3") === false){
   $error_messages .= "Error Message on Another Line <br/>";
}
// next check if there are any errors, and if so, write them to form_set_error
if(strlen($error_messages) > 0){
  form_set_error('',$error_messages);
}

Questo mostrerà tutti gli errori accumulati come Drupal.

0
mparker1113