webleads-tracker

Création d'un champ sous Drupal 7

Création des fonctions de validation et de gestion d'erreur

Nous devons maintenant écrire quelques fonctions de validation et de gestion d'erreur que drupal utilise.

Le hook HOOK_field_is_empty

Ce hook permet à drupal de savoir si la valeur de notre champ est vide.
Vous trouverez sa documentation sur l'api drupal (hook_field_is_empty)
Copiez/collez ce code dans votre fichier fieldmap.module.



/**
 * Implements hook_field_is_empty().
 */
function fieldmap_field_is_empty($item, $field) {
  if ($field["type"] == "map") {
    if (empty($item["longitude"]) && empty($item["latitude"])) {
      return TRUE;
    }
  }
  return FALSE; 
}

Implémentation du hook HOOK_field_validate

Ce hook permet de valider les données entrées concernant le champ.
Copiez/collez ce code dans votre fichier fieldmap.module.
Vous trouverez sa documentation sur l'api drupal (hook_field_validate).


     

/**
 * Implements hook_field_validate().
 * 
 */
function fieldmap_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
  
  foreach ($items as $delta => $item) {
      if (!empty($item["latitude"])) {
        if(!preg_match("#\d+\.\d+#",$item["latitude"])) {
          $errors[$field["field_name"]][$langcode][$delta][] = array(
            "error" => "latitude",
            "message" => t("Le champ 'latitude' doit etre de la forme 2.48."),
          );    
        }
      }
      if (!empty($item["longitude"])) {    
        if(!preg_match("#\d+\.\d+#",$item["longitude"])) { 
          $errors[$field["field_name"]][$langcode][$delta][] = array(
            "error" => "longitude",
            "message" => t("Le champ 'longitude' doit etre de la forme 2.48."),
          );          
        }
      } 
    }        
 
}

Implémentation du hook HOOK_field_widget_error

Ce hook permet de traiter les messages d'erreurs retournés par hook_field_validate().
Vous trouverez sa documentation ici.



/**
 * Implements hook_field_widget_error().
 */
function fieldmap_field_widget_error($element, $error, $form, &$form_state) {  
  switch ($error["error"]) {
    case "longitude":
    case "latitude":  
      form_error($element[$error["error"]], $error["message"]);
      break;
  }
}