Convalidare campi in Drupal

Convalidare campi in Drupal

Solitamente, quando si crea un form di inserimento dati con Drupal come ad esempio un semplice form per creare un nodo usando dei campi con CCK, c'è la possibilità di specificare se il campo è obbligatorio ed è anche possibile stabilire quali sono i valori che questo campo accetta (valori ammessi).

In alcuni casi particolari potrebbe però essere necessario stabilire delle condizioni più complesse per convalidare l'inserimento dei dati. Ad esempio vincolare l'inserimento di particolari campi in base ai valori inseriti in altri campi.

Come convalidare i campi in Drupal

Il modo più semplice per risolvere questo problema, è quello di programmare un modulo Drupal che intercetti l'operazione di salvataggio di un nodo, controlli i valori inseriti e stabilisca se sono corretti o se c'è qualche errore di inserimento dati.

Per prima cosa dobbiamo usare l'hook_nodeapi() per intercettare la convalida del nodo. Se il modulo lo chiamiamo "my-validation", allora il codice sarà:

function my-validation_nodeapi($node, $op, $arg = 0) {
  switch ($op) {
  case 'validate':
    my-validation_node_validate($node);
    break;
  }
}

Dopodiché bisogna scrivere la funzione che si occupa della verifica dei valori inseriti. Come esempio porto la convalida di alcuni campi creati con CCK. I campi sono "field_name" e "field_email". Il controllo da effettuare è la presenza di un valore nel campo "email" nel caso in cui sia presente un valore nel campo "nome".

function my-validation_node_validate(&$node) {
  // Carichiamo i campi su due variabili per comodità.
  $f_name = $node->field_name[0]['value'];
  $f_email = $node->field_email[0]['value'];
  // Verifico l'esistenza dell'email solo se
  // esiste un valore nel campo nome.
  if ($f_name && !f_email) {
    // Restituisco un messaggio di errore
    form_set_error("field_email", "Inserire l'email";
  }
}

Con questo metodo è possibile generare delle regole di convalida anche molto complesse usando poche righe di codice.

Invia nuovo commento
Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
Refresh Type the characters you see in this picture. Type the characters you see in the picture; if you can't read them, submit the form and a new image will be generated. Not case sensitive.  Switch to audio verification.