Дополнительные поля при регистрации.

Brat904

Пользователь
#1
Подскажите пожалуйста как создать обязательные дополнительные поля при регистрации ? (Пол и День Рождение).
 
G

Gemini_13

Гость
#2
они уже есть созданы, нужно только их "открыть".
редактировать надо два файла:
- /includes/ucp/usercp_register.php
- /templates/default/usercp_register.tpl

По порядку...
/includes/ucp/usercp_register.php
Находим:
PHP:
        // field => can_edit
        $profile_fields = array(
            'username'        => true,
            'user_password'    => true,
            'user_email'      => true,
            'user_timezone'    => true,
            'user_lang'        => true,
        );
дописываем сюда в список свои поля. честно скажу, что я точно не помню обязалово это или нет, а смотреть сейчас настроения нету. но по крайней мере это не повредит.

/templates/default/usercp_register.tpl
Тут есть для шаблонизатора условие
Код:
<!-- IF EDIT_PROFILE -->
...
<!-- ENDIF -->
Смысл его в том, что внутри этого условия поля видны только во время редактирования профиля, а значит для регистрации нет.


Например, нужно открыть пол при регистрации, тогда делаем так
находим часть кода, которая отвечает за вывод в шаблоне:
HTML:
<!-- IF $bb_cfg['gender'] -->
<tr>
    <td>{L_GENDER}:</td>
    <td>{USER_GENDER}</td>
</tr>
<!-- ENDIF -->
меняем на:
HTML:
<!-- ENDIF -->
<!-- IF $bb_cfg['gender'] -->
<tr>
    <td>{L_GENDER}:</td>
    <td>{USER_GENDER}</td>
</tr>
<!-- ENDIF -->
<!-- IF EDIT_PROFILE -->
Прошу заметить, что я не перепутал местами теги, все верно. Почему? Просто выше уже стоит условие <!-- IF EDIT_PROFILE -->, а значит его нужно закрыть перед "полом", а потом снова открыть. Таким образом получается исключение, которое позволяет вывести блок для регистрации.

Надеюсь изложил суть понятно, ибо объяснять я не умею :)
 

Nikolay90

Пользователь
#4
...ибо объяснять я не умею
Это неправда, я так считаю. Написанная инструкция понятна. Возможно, у меня кривые руки.
По аналогии, я делал "открытие" поля с датой рождения в регистрационном файле. Получилось следующее:
1) в /includes/ucp/usercp_register.php
PHP:
switch ($mode)
{
    /**
    *  Регистрация
    */
    case 'register':
...
  // field => can_edit
  $profile_fields = array(
    'username'        => true,
    'user_password'    => true,
    'user_email'      => true,
    'user_birthday'    => true,
...
2) в /templates/default/usercp_register.tpl
PHP:
<!-- ENDIF -->
<!-- IF BIRTHDAY -->
<tr>
    <td>{L_BIRTHDAY}:</td>
    <td>{BIRTHDAY}</td>
</tr>
<!-- ENDIF -->
<!-- IF EDIT_PROFILE -->
Поле с датой рождения при регистрации не появилось. Ошибок и нотисов нет. Логи пустые.
 

Nikolay90

Пользователь
#6
Phoenix, спасибо. Помогло. Теперь при регистрации само поле с выбором числа, месяца и года рождения присутствует.

Вскрылась другая проблема: даже если юзер при регистрации не укажет свою дату рождения, регистрация всё равно проходит успешно. То есть, я так понимаю, что при регистрации не срабатывает верификация данных по дате рождения.
 

Phoenix

Пользователь
#7
Вскрылась другая проблема: даже если юзер при регистрации не укажет свою дату рождения, регистрация всё равно проходит успешно. То есть, я так понимаю, что при регистрации не срабатывает верификация данных по дате рождения.
"Обязательное" поле для даты рождения можно сделать приблизительно так:

Открыть includes/ucp/usercp_register.php
найти:
PHP:
        $profile_fields = array(
            'username'        => true,
            'user_password'    => true,
            'user_email'      => true,
добавить после:
PHP:
            'user_birthday'    => true,
найти:
PHP:
        $pr_data = array(
            'user_id'          => ANONYMOUS,
            'username'        => '',
            'user_password'    => '',
            'user_email'      => '',
добавить после (для ревизии R495 и выше):
PHP:
            'user_birthday'    => '0000-00-00',
* если ревизия ниже R495, тогда это:
PHP:
            'user_birthday'    => 0,
найти:
PHP:
        $next_birthday_greeting = (date('md') < $b_md . (($b_day <= 9) ? '0' : '') . $b_day) ? date('Y') : date('Y')+1;
    }
}
else
{
добавить после:
PHP:
    if ($submit && $bb_cfg['birthday_required'] && !IS_ADMIN) { $errors[] = $lang['BIRTHDAY_REQUIRED']; }
Открыть language/lang_russian/lang_main.php
добавить:
PHP:
$lang['BIRTHDAY_REQUIRED'] = 'Поле "День рождения" является обязательным';
Открыть language/lang_english/lang_main.php
добавить:
PHP:
$lang['BIRTHDAY_REQUIRED'] = 'Your Birthday are required on this site';
Открыть templates/default/usercp_register.tpl
найти:
PHP:
<td>{L_BIRTHDAY}:</td>
заменить на:
PHP:
<td>{L_BIRTHDAY}:<!-- IF $bb_cfg['birthday_required'] && not IS_ADMIN --> *<!-- ENDIF --></td>
Открыть config.php
добавить в конец файла:
PHP:
$bb_cfg['birthday_required'] = true;
P.S. по желанию поставить $bb_cfg['birthday_required'] = false; если поле не требуется как обязательное...
 

Lynx

Пользователь
#8
При регистрации обязательное указание возраста работает, но не работает при редактировании профиля - пользователь может убрать дату рождения из профиля.
 

Nikolay90

Пользователь
#10
Тут, по-видимому, в этом разговоре я виноват: некорректно выразился. Возможно, я неудачно использовал термин "верификация данных". Имелась в виду - валидация. По умолчанию в движке, поле с датой рождения скрыто. Благодаря подсказке Gemini_13 его удалось открыть. Но после этого, при самой регистрации, валидация даты рождения не работала, хотя по умолчанию в движке валидация работает при редактировании профиля. Так вот, суть моего предыдущего сообщения: как поправить валидацию даты, чтобы она работала и при редактировании профиля и при регистрации.
Моя гипотеза, что дело в этом операторе if:
PHP:
if($mode != 'register')
 
Сверху