Как я могу разрешить пользователю выбирать свой язык при регистрации?


Существует решение для отображения поля выбора языка сайта в форме пользователя/регистрации в Drupal 6 здесь: https://stackoverflow.com/questions/5556895/how-to-add-language-switcher-in-user-register-form-in-drupal-6

Однако лично я не могу преобразовать это в Drupal 7. Есть ли другой способ сделать это?

ИЗМЕНИТЬ: Когда несколько языков включены с помощью локали, "Языковые настройки" со списком языков пользователя отображаются на /администратор/люди/создать. Это то, что я хочу - за исключением того, что я хочу, чтобы это отображалось в /user/register, где оно не отображается (по крайней мере, при включении только локали) само по себе.

Author: Community, 2012-03-01

2 answers

Поскольку в Drupal 7 не отображается выбор языка для пользователей, которые создают свою собственную учетную запись, вам необходимо реализовать hook_form_user_register_form_alter() (см. Документацию для hook_form_FORM_ID_alter()), используя следующий код.

function mymodule_form_user_register_form_alter(&$form, &$form_state) {
  // Only alter user forms if there is more than one language.
  if (!isset($form['locale']) && drupal_multilingual()) {
    locale_language_selector_form($form, $form_state, $form['#user']);
  }

  if (isset($form['locale']) { 
    $form['locale']['#access'] = TRUE;
  }
}

Код является универсальным и работает даже в том случае, если модуль удалил поле выбора языка (хотя модуль никогда не должен этого делать).

"user_register_form" - это конструктор форм, используемый для пути "пользователь/регистрация". Код работает если включен модуль локали. Код покажет выбор языка, если включено более одного языка; в противном случае drupal_multilingual() вернет FALSE.

  $items['user/register'] = array(
    'title' => 'Create new account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('user_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK,
  );

Код, используемый в модуле локали, следующий.

function locale_form_alter(&$form, &$form_state, $form_id) {
  // Only alter user forms if there is more than one language.
  if (drupal_multilingual()) {
    // Display language selector when either creating a user on the admin
    // interface or editing a user account.
    if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) {
      locale_language_selector_form($form, $form_state, $form['#user']);
    }
  }
}

 

В общем случае эквивалентом hook_user('register') в Drupal 7 является hook_form_user_register_form_alter(); эквивалентом hook_user('form') является hook_form_user_profile_form_alter().

 2
Author: kiamlaluno, 2017-06-28 08:01:57

Да, вы можете добавить любое поле в форму регистрации пользователя, используя Профиле2.

Сначала загрузите необходимый модуль и включите модуль профиля 2.Затем перейдите в раздел "Администратор/структура", там вы найдете опцию "Типы профилей".Нажмите на это, затем вы получите форму, подобную полю управления типом контента.Там вы можете создать опцию selectbox.

Если вам нужно, чтобы это поле выбора появилось на странице регистрации пользователя, выполните следующие действия

  1. Перейдите к "администратор/структура/профили/управление/главная"
  2. Там вы получите флажок, установите его, чтобы поле было видно в регистрационной форме
 0
Author: sathishkumar, 2012-03-01 14:52:52