2010-02-15 10 views
8

Chcę podłączyć się do modułu rejestracyjnego. Mam już bazę danych 50000 użytkowników, którzy korzystają z mojej starej witryny. Teraz migruję do Drupala.Dołącz do rejestracji Drupala i sprawdź informacje o użytkowniku względem logiki biznesowej

Nadal nie migrowałem wpisów do bazy danych drupal. Będę sprawdzał w mojej starej bazie danych.

Gdy użytkownik próbuje się zarejestrować w Drupal, muszę sprawdzić, czy podana przez niego nazwa użytkownika jest już obecna na tej liście 50000 (i rosnącej) pozycji. Jeśli istnieje, muszę anulować rejestrację, pokazując błąd informujący, że nazwa użytkownika istnieje. Jeśli mój kod wskazuje, że sprawdzanie poprawności nie powiodło się, Jak mogę poinformować drupal, aby wyświetlił komunikat błędu?

Edytuj: Podłączyłem się do hook_user i zaznaczyłem opcję "validate" op. Potrafię sprawdzać i przypisywać komunikaty o błędach. Ale dzieje się to dla wszystkich form. Chcę zweryfikować tylko nowy formularz tworzenia konta. Jak mogę to zrobić?

Dzięki.

Odpowiedz

18

Należy zarejestrować dodatkową funkcję zwrotną walidacji formularza rejestracyjnego przy użyciu hook_form_FORM_ID_alter(), trochę tak:

// Alter the registration form 
function yourModuleName_form_user_register_alter(&$form, &$form_state) { 
    // Add your own function to the array of validation callbacks 
    $form['#validate'][] = 'yourModuleName_user_register_validate'; 
} 

// Perform your own validation 
function yourModuleName_user_register_validate($form, &$form_state) { 
    // Extract the submitted name 
    $name = $form_state['values']['name']; 
    // Check it according to your own logic 
    $is_valid_name = your_check_for_valid_name(); 
    // File error, when not valid 
    if (!$is_valid) { 
    form_set_error('name', t('Name already taken, please choose a different one')); 
    } 
} 
+1

+1 Wielkie dzięki. Udało się, jestem w stanie ustawić sprawdzanie poprawności dla pól danego formularza. Nie wiedziałem o funkcji FORM_ID, użyłem innego haka i działało dla wszystkich formularzy: D – user266803

+0

Chociaż jest to świetne rozwiązanie, należy pamiętać, że obecnie Drupal uruchamia hook_form_alter AFTER hook_form_FORM_ID_alter. Tak więc może być przypadek na drodze, gdzie inny moduł przeładuje twoje zmiany hook_form_FORM_ID_alter. 95% czasu nie napotkasz problemu, ale niektórzy twierdzą, że najbezpieczniej jest używać hook_form_alter i instrukcji switch. –

+0

Jeśli funkcja sprawdzania poprawności sprawdza tylko jedno pole, należy zamiast tego rozważyć utworzenie funkcji sprawdzania poprawności elementu (https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#element_validate). – rymo

6

Henrik Opel praca odpowiedź na Drupal Drupal 7 6. W przypadku stosowania yourModuleName_form_user_register_form_alter

1

Oto niektóre przykłady dla Drupala 7:

/** 
* Implements of hook_user_insert(). 
*/ 
function foo_user_insert(&$edit, $account, $category) { 
    // foo_user_submit($edit, $account); 
} 

/** 
* Implementation of hook_user_delete(). 
*/ 
function foo_user_delete($account) { 
    // foo_user_delete($account); 
} 

/** 
* Implements hook_form_FORM_ID_alter(). 
* Form ID: user_register_form 
*/ 
function foo_form_user_register_form_alter($form, &$form_state) { 
    if ($form['#user_category'] == 'account' && !isset($form['#user']->uid)) { 
    // Foo code 
    } 
} 

/** 
* Implements hook_form_FORM_ID_alter(). 
* Form ID: user_profile_form 
*/ 
function foo_form_user_profile_form_alter($form, &$form_state) { 
    // Set a custom form validate and submit handlers. 
    $form['#validate'][] = 'foo_account_validate'; 
    $form['#submit'][] = 'foo_account_submit'; 
} 

/** 
* Implements of hook_form_alter(). 
* This is the same as: hook_form_FORM_ID_alter() 
*/ 
function foo_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
    case "user_profile_form": 
    case "user_register_form": 
     break; 
    } 
} 
Powiązane problemy