Zusatzfelder beim Benutzer individuell validieren – Drupal 7

Registrierungsformular in Drupal 7

In Drupal 7 kann man dem Benutzerprofil beliebige weitere Felder hinzufügen. Unter People » Account settings » Manage fields stehen einen eine reihe von Feldtypen und Widgets zur Auswahl. Diese kann man auch bequem von Drupal validieren lassen. Mithilfe weiterer Module, wie zum Beispiel Field validation, sind auch komplexe Validatoren möglich. Doch was tun, wenn der Wert anhand einer externen Schnittstelle geprüft werden soll? Anhand dieses Beispiels zeige ich heute, wie man sich in das Registrierformular einhängt und zusätzliche Validatoren bereitstellt.

Als Erstes müssen wir einen neun Validator für das Formular erstellen. Als Validator kann eine beliebige Funktion erstellt werden. Die Funktion bekommt $form und eine Referenz von $form_state übergeben.

2
3
4
5
6
7
function my_module_user_register_validate($form, &$form_state) {
  // Hier kann eine beliebige Prüfung erfolgen
  if($form_state['values']['field_user_registration_code']['und'][0]['value'] !== 'abc') {
    form_set_error('code', t('Moment, hier stimmt was nicht!'));
  }
}

In der Funktion wird nun der Wert der Felder nach Wünschen validiert und bei Fehlern wird einfach form_set_error() aufgerufen.

Jetzt muss der neue Validator nur registriert werden. Dafür wird mit dem Hook hook_form_alter() das Registrierungsformular erweitert.

8
9
10
11
12
13
14
function my_module_form_alter(&$form, $form_state, $form_id)
{
  if ($form_id === 'user_register_form')
  {
    $form['#validate'][] = 'my_module_user_register_validate';
  }
}

Dieser Hook wird immer aufgerufen, wenn irgendwo ein Formular erzeugt wird. Deswegen müssen wir dafür sorgen, dass der neue Validator ausschließlich dem user_register_form zugeordnet wird.

Im Grunde war’s das auch schon. Viel Spaß beim Ausprobieren.

ALL-INKL.COM