#drupal #drupal-7
#drupal #drupal-7
Вопрос:
Страница регистрации пользователя по умолчанию в Drupal 7 содержит поля для ввода имени пользователя, пароля и адреса электронной почты.
Я добавил несколько дополнительных полей, которые отображаются в этой форме, но я хотел бы изменить способ ее отображения.
Например, я хотел бы изменить порядок элементов формы и добавить CSS.
Важно отметить, что я хотел бы изменить ярлык, который отображается для имени пользователя — я бы хотел, чтобы вместо него было написано «Псевдоним».
Как я могу это сделать?
Ответ №1:
Вы можете изменить это на нескольких уровнях:
Переводы:
В settings.php вы уже видите несколько примеров, просто добавьте:
$conf[‘locale_custom_strings_en’][«] = array( ‘Имя пользователя’ => ‘Никнейм’, ‘username’ => ‘никнейм’, );
Возможно, вам захочется переопределить дополнительные строки, содержащие имя пользователя, например «Имя пользователя недопустимо». Пользовательский интерфейс становится плохим, когда вы начинаете путать эти слова, поэтому, чтобы сделать то, что вы хотите правильно, вам все равно придется изменить несколько таких строк, даже если вы выберете один из других приведенных ниже вариантов. В первую очередь вам нужно будет уделить некоторое внимание строкам проверки и ошибок.
Это, однако, приведет к изменению «имени пользователя» на «никнейм» по всему периметру! Также для администраторов и модераторов. Это может иметь нежелательные побочные эффекты, основанные на ваших более широких спецификациях и пожеланиях.
Переопределение темы:
В template.php вы можете переопределить все, что передается на экран. В этом случае вам нужно будет переопределить шаблон формы входа.
Явного кода слишком много, чтобы вводить его здесь. Но в грубых строках вам нужно:
- Сообщите Drupal, что вы хотите использовать шаблон для формы входа пользователя с
hook_theme
. - Создайте файл шаблона. И используйте там любой HTML, который вы пожелаете.
Переопределение формы:
В вашей теме и в модулях вы можете использовать hook_form_alter для переопределения любой темы.
В вашей теме вы бы добавили в template.php:
function your_template_form_user_register_form_alter(amp;$form, amp;$form_state, $form_id) {
$form['account']['name']['#title'] = t('Nickname');
}
Или, если вам нужно больше бизнес-логики (которая не относится к уровню темы), вы должны создать модуль и добавить туда form_alter:
function your_modulename_form_user_register_form_alter(amp;$form, amp;$form_state, $form_id) {
if (_your_module_is_person_from_irc()) {
$form['account']['name']['#title'] = t('Nickname');
}
}
Комментарии:
1. Функция в template.php у меня сработало, но при попытке использования никакого ответа не последовало
your_modulename_form_user_register_form_alter
, поэтому мне пришлось добавить свою (простую) логику в template.php . Есть идеи? В любом случае спасибо!2. Я добавил ссылку на более подробное обсуждение
hook_form_alter
, которое является необходимой концепцией, но очень сложной и запутанной. Вкратце: это беспорядок, но вам нужно с ним ознакомиться, чтобы разрабатывать с Drupal.
Ответ №2:
У меня была похожая задача несколько дней назад, и я сделал это с помощью этого поста.
Для этого вам действительно нужно настроить пользовательскую тему, но это довольно легко сделать, для этого есть много примеров.
В качестве дополнительной заметки рассмотрите возможность публикации вопросов по drupal в http://drupal.stackexchange.com , вы, вероятно, получили бы больше ответов.
Удачи!
Ответ №3:
В вашей теме template.php добавить:
function [YOUR-TEMPLATE-NAME]_form_user_register_form_alter(amp;$form, amp;$form_state, $form_id) {
$form['account']['name']['#title'] = t('Nickname');
}
Чтобы увидеть все, что вы можете изменить, выполните print_r($form);
внутри этой функции.
Ответ №4:
Мне просто пришлось решать ту же проблему.
Я несколько часов пытался разобраться в функциях user_register_submit и user_register_form.
Самым простым и гибким решением, которое я нашел, было извлечь данные формы (имя пользователя, адрес электронной почты и пароль) через ajax / jquery и создать пользовательский модуль, который сохраняет данные для нового пользователя программно.
На самом деле я обнаружил, что чаще всего быстрее просто обойти «путь drupal» через ajax / пользовательские модули, чем пытаться понять слои устаревшего кода.
И это исходит от парня, который начал друпалинг, не имея предварительных знаний php.