2010-02-15 4 views
8

Voglio collegarmi al modulo di registrazione. Ho già un database di 50000 utenti che usano il mio vecchio sito web. Ora sto migrando a Drupal.Collegarsi alla registrazione Drupal e convalidare le informazioni utente sulla logica aziendale

Non ho ancora effettuato la migrazione delle voci nel database di drupal. Controllerò il mio vecchio database.

Quando un utente tenta di registrarsi in Drupal, devo verificare se il nome utente che ha dato è già presente in quell'elenco di 50000 (e in crescita) voci. Se esiste, ho bisogno di cancellare la registrazione mostrando un errore msg dicendo che il nome utente esiste ..

Quale gancio dovrei usare? Se il mio codice indica che la validazione è fallita, come posso dire a drupal di visualizzare un messaggio di errore?

Modifica: mi sono collegato a hook_user e ho controllato l'operazione di 'validazione'. Sono in grado di convalidare e assegnare messaggi di errore. Ma sta accadendo per tutte le forme. Voglio convalidare solo il nuovo modulo di creazione dell'account. Come lo posso fare?

Grazie.

risposta

18

Si dovrebbe registrare una funzione aggiuntiva di validazione di callback per il modulo di registrazione utilizzando hook_form_FORM_ID_alter(), un po 'in questo modo:

// 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 Grazie mille. Ha funzionato, sono in grado di impostare la convalida per i campi di quel particolare modulo. Non sapevo nulla di FORM_ID, ho usato un altro hook ed era in esecuzione per tutti i moduli: D – user266803

+0

Sebbene questa sia un'ottima soluzione, tieni presente che attualmente Drupal esegue hook_form_alter AFTER hook_form_FORM_ID_alter. Quindi potrebbe esserci un caso lungo la strada in cui un altro modulo supererà le tue modifiche hook_form_FORM_ID_alter. Il 95% delle volte non si incontra un problema, ma alcuni dicono che è più sicuro usare hook_form_alter e un'istruzione switch. –

+0

Se la funzione di convalida sta controllando solo un singolo campo, prendere in considerazione la creazione di una funzione [Validazione elemento] (https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#element_validate). – rymo

6

Henrik Opel risposta lavorare su Drupal 6. Per Drupal 7 uso yourModuleName_form_user_register_form_alter

1

Ecco alcuni esempi per Drupal 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; 
    } 
}