Тут такое дело... Поручили мне сделать для сайта кафедры форму регистрации, не совсем стандартную...
Вот нынешняя форма регистрации: http://kaf36.weblikegames.com/user/register
Суть задания: добавить на страницу чекбокс "Я - преподаватель кафедры" и соответственно, если преподаватель ставит туда галочку ниже появляется поле куда ему надо ввести код подтверждения, который будет роздан всем преподам. Так же убирается поле для даты рождения и года поступления, но появляется поле "Номер кафедры". И главное - преподаватель получает право постить на сайте новости, в отличии от обычных студентов, для которых доступны только комменты.
И еще желательно перенести чекбокс правее основной формы регистрации, чтоб удобнее было... Я так понимаю это надо вручную код редактировать.
И еще подскажите - как записать этот код подтверждения в БД? Чтоб никто кроме админа и преподов не мог знать его... Ну и как процесс сверки сделать?
Вот... Не знаю если честно практически ничего по этой теме, поэтому прошу мне помочь, буду благодарен за любые советы.
Комментарии
Надо думать скорее не о полях, а о ролях - форма регистрации в зависимости от роли пользователя: во время регистрации пользователь выбирает роль, студент или преподаватель. Если студент - то показываем те поля, что есть, если преподаватель, то номер кафедры. Поможет модуль auto_assign_role.
Сначала сделайте это, а потом для преподавателя прикрутите ввод кода, который выдаёт модуль Invite.
http://www.drupal.ru/node/25591 тут современное состояние проблемы.
Через Инвайт наверно клево, но может быть сложно.
Большое спасибо, буду пробовать. О результатах отпишусь.
Там народ извращениями балуется, типа создания страниц через views, но почитайте.
Совет - если не работает модуль, пробуйте dev-версию (а не ставьте кучу патчей, как в посте).
hook_form_alter - чтобы изменить форму регистрации. Добавляете в этой функции еще одну функцию валидации. В саму форму добавляете чекбокс и еще 1 необязательное поле для "кода преподавателя". В функции валидации можете сделать его обязательным, если был отмечен чекбокс.
В БД создайте таблицу, в ней храните md5 хэш этих кодов преподавателей. Таблица такая:
id (autoincrement, primary key)
code (тут md5 хэш кода)
<?php function mymodule_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'user_register') { // неуверен, надо посмотреть какой у нее id
$form['prepod'] = array(
'#type' => 'checkbox',
'#title' => t('I am teacher'),
);
$form['code'] = array(
'#type' => 'textfield',
'#title' => t('Identification code'),
'#size' => 10,
);
$form['#validate'][] = 'mymodule_register_form_validate';
}
}
function
mymodule_register_form_validate ($form, &$form_state) {$values = $form_state['values'];
if ($values['prepod']) {
if (!$values['code']) {
form_set_error('user_register', t('Please enter Identification code'));
return;
}
$code = md5($values['code']);
$code_is_specified = db_result(db_query("SELECT id FROM {mymodule_codes} WHERE code = '%s'", $code));
if (!$code_is_specified) {
form_set_error('user_register', t('Invalid code'));
}
}
}
?>
Как добавить юзера в роль преподавателя - тут надо использовать hook_user, но сходу не скажу что там и как..
Убирать поля с годом рождения можно с помощью Яваскриптов, ну и unset их на стадии валидации.
2Обухов Никита: Ты уверен, что топик стартер будет себя уверенно чуствовать в PHP-коде? Если нет готового решения, то лучше новичкам предлагать "point-and-click" решения, тем более, что бОльшую часть функционала можно сделать именно так.
Кстати, Apollon, с учётом того, что список преподователей известен (вы же будете им коды передавать?), да и сами коды надо хранить для каждого преподователя, не проще ли самому (скриптом) завести всех юзеров-преподователей и раздать им уже логин/пасс от их учётки?
Apollon, действительно зарегьте их сами и логины-пароли на бумажке или можно сделать ход конем пусть регистрируются как все а потом вы просто измените их тип учетной записи c общей на преподавательскую в site.ru/admin/user/user/list
И если не секрет что за кафедра и какого вуза.
Спасибо, действительно, наверно будет проще сделать учетные записи самому...
mak-vardugin, МИФИ, факультет Кибернетики, Кафедра 36 Информационные технологии.
солидно! Когда мне в свое время предложили сделать сайт для своей кафедры я отказался, и досих пор не жалею, сделать это фигня, а вот потом его вести.....