После установки, регистрационная форма друпала (drupal) имеет всего пару полей — login и email. В большинстве случаев это можно почитать за благо. Ибо по моему разумению большего и не надо, разве что поле проверочного кода добавить для предотвращения авторегистраций.
Но суровые будни показывают, что для коммерческих сайтов важно собрать хотя бы минимальную анкету о пользователях, которые регистрируются на сайте. Есть желание сразу разделить физических и юридических лиц, узнать, к примеру, ФИО, тел контактного лица, чтобы менеджер по работе с клиентами мог обработать данного потенциального клиента.
Расширяем анкету пользователя и добавляем поля регистрации.
Этот этап очень прост. Нужно активировать модуль Profile из группы дополнительных модулей ядра. В меню администратора появится страница /admin/user/profile, где можно создать ряд полей в анкете пользователя. Чтобы иметь возможность добавлять поля типа «дата», понадобится пакет модулей date.
У меня получился вот такой примитивный набор полей:Поля разбиты на две группы — «Контактная информация», где собраны поля подходящие для физического лица, либо представителя организации. Вторая группа полей — «Реквизиты организации» — тут мы укажем поля нужные для организаций. Также обратите внимание на специальный checkbox — profile_jurflag. Мы не будем показывать все поля анкеты без надобности. Если пользователь отмечает галочку profile_jurflag — тогда мы открываем поля с реквизитами предприятия. В случае нашей анкеты, все поля можно отметить для показа в форме регистрации. Это лишь пример, реальная анкета может содержать на много больше полей и требовать заполнить их все при регистрации не очень гуманно.
Добавляем к форме регистрации описание
Часто нужно как то морально подготовить пользователя перед заполнением формы регистрации. В drupal этот момент предусмотрен. На странице /admin/user/settings — вы найдете поле «инструкции по регистрации пользователя». В принципе, это можно реализовать и с помощью зацепки (см. далее).
Зацепка к форме регистрации и форме профиля пользователя
Следующим шагом будет необходимо реализовать зацепку form_alter к формам регистрации и профиля пользователя. Если вы пишите какой то сайт, то наверняка все зацепки и самописный код оформляете отдельным модулем. Если у вас нет такой привычки — заведите её :). Пусть это будет некий модуль — mymodule.
Все формы движка спроектированы в drupal с применением forms.API. Знакомство с этим и другими API очень полезно, если вы собираетесь иметь дело с drupal. См. — api.drupal.org.
В зацепке я собираюсь реализовать следующие операции:
- Показывать / прятать поля организации при активации / деактивации флажка profile_jurflag.
- Добавить пост. обработчик в форму регистрации — т.е. когда регистрация успешно прошла, я хочу выполнить какие то свои действия, например, отправить уведомление менеджеру о новой регистрации на сайте.
- Скрыть поле profile_jurflag из профиля пользователя — чтобы физическое лицо не переправило себя в юридическое.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function mymodule_form_alter(&$form, $form_state, $form_id) { $groups = array('contact' => 'Контактная информация', 'org' => 'Реквизиты предприятия'); switch ($form_id) { case 'user_profile_form': //скрываем это поле от редактирования $form[$groups['contact']]['profile_jurflag']['#type'] = 'value'; break; case 'user_register': //показать-убрать группу полей при клике на нужный флажок $form[$groups['org']]['#attributes'] = array('id' => 'FSrequzites', 'style' => 'display: none'); $form[$groups['contact']]['profile_jurflag']['#attributes'] = array('onclick' => 'document.getElementById("FSrequzites").style.display = this.checked ? "block" : "none";'); //add submit callback $form['#submit'][] = 'mymodule_user_register_submit'; break; } } |
Вот и все, в теории. Любопытно, возможно, посмотреть ещё код mymodule_user_register_submit
1 2 3 4 5 6 7 8 9 10 |
function mymodule_user_register_submit($form, &$form_state) { $manag_email = 'manager_mail@mail.ml'; //отправка письма манагеру - о том, как работает ф-ция drupal_mail //расскажу в отдельном обзоре if (valid_email_address($manag_email)) drupal_mail('mymodule', 'newuser', $manag_email, language_default(), $form_state); //перейдем на страницу с сообщением об успешной регистрации //для этих целей можно создать простую статическую страничку с нужным адресом drupal_goto('user/registration-successfull'); } |
Возможно стоит упомянуть, что для вывода информации о пользователе, т.н. профиля, служит отдельных шаблон. Вы можете скопировать этот шаблон из модуля user/user-profile.tpl.php в свою тему оформления и запрограммировать его там на ваш вкус. Не забудьте при этом сбросить кеш друпала.
А может подскажите еще в какую таблицу и в какие поля пишутся эти дополнительные поля формы регистрации?
Чета как то с налету найти не получилось
Описание полей профиля тут profile_fields, а сами значения — в таблице profile_values.