Подключайтесь к регистрации в Drupal и проверяйте информацию пользователя по бизнес-логике - PullRequest
8 голосов
/ 15 февраля 2010

Я хочу подключиться к модулю регистрации. У меня уже есть база данных 50000 пользователей, которые используют мой старый сайт. Сейчас я мигрирую в Drupal.

Я до сих пор не перенес записи в базу данных drupal. Я буду проверять мою старую базу данных.

Когда пользователь пытается зарегистрироваться в Drupal, мне нужно проверить, присутствует ли указанное им имя пользователя в этом списке из 50000 (и растущих) записей. Если он существует, мне нужно отменить регистрацию с сообщением об ошибке, в котором говорится, что имя пользователя существует ..

Какой крючок мне использовать? Если мой код показывает, что проверка завершилась неудачно, как я могу сказать drupal отображать сообщение об ошибке?

Редактировать: я подключился к hook_user и проверил опцию 'validate'. Я могу проверить и назначить сообщения об ошибках. Но это происходит для всех форм. Я хочу проверить только новую форму создания учетной записи. Как я могу это сделать?

Спасибо.

Ответы [ 4 ]

18 голосов
/ 20 февраля 2010

Вы должны зарегистрировать дополнительную функцию обратного вызова проверки для формы регистрации, используя hook_form_FORM_ID_alter(), примерно так:

// 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'));
  }
}
6 голосов
/ 11 марта 2013

Ответ Хенрика Опеля работает на Drupal 6. Для Drupal 7 используйте yourModuleName_form_user_register_form_alter

1 голос
/ 08 ноября 2013

Вот несколько примеров для 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;
  }
}
0 голосов
/ 26 января 2015

Рассмотрите возможность использования модуля проверки подлинности имени пользователя AJAX: https://www.drupal.org/project/username_check

...