Периодически на форуме спрашивают, как добавить то или иное поле в форму регистрации пользователей Joomla. И почти всегда их отправляют читать разделы и документацию по компоненту CommunityBuilder — действительно мощному решению для расширения профайлов пользователей Joomla. Однако не всегда это нужно. Иногда требуется всего одно-два поля, а приходится ставить целый компонент. В этой статье я хочу рассказать, как вручную добавить поле в форуму регистрации пользователей. Перед началом модификаций рекомендую создать резервную копию изменяемых файлов. Если у вас вдруг что-то не получится наличие резервной копии позволит вам откатить изменения и восстановить работоспособность сайта. Для начала необходимо добавить такое поле в таблицу jos_users, чтобы можно было хранить введенную пользователем информацию. Для этого выполним в phpMyAdmin следующий запрос: ALTER TABLE `jos_users` ADD `birthDate` DATETIME NOT NULL default '0000-00-00 00:00:00'; После этого расширим набор полей класса mosUser, чтобы данные о дате рождения автоматически попадали в базу при регистрации пользователя. - Открываем файл /includes/joomla.php
- Находим в нем строчки:
var $params = null;
/**
* @param database A database connector object
*/
function mosUser( &$database ) { и заменяем их на var $params = null;
var $birthDate = null;
/**
* @param database A database connector object
*/
function mosUser( &$database ) { - Сохраняем изменения в файле
Первая часть подготовки выполнена, теперь необходимо добавить непосредственно поле на форму, и подправить функцию сохранения нового пользователя. - Открываем файл /components/com_registration/registration.html.php
- Находим в нем строчки:
<input type="text" name="name" size="40" value="" class="inputbox" maxlength="50" />
</td>
</tr> и вставляем после них код: <tr>
<td>
Дата рождения
</td>
<td>
<select name="birthDate_d">
<option value=""></option>
<?php
for($i=1; $i<=31; $i++) {
?>
<option value="">echo str_pad($i, 2, "0", STR_PAD_LEFT); ?></option>
<?php
}
?>
</select>
<select name="birthDate_m">
<option value=""></option>
<?php
for($i=1; $i<=12; $i++) {
?>
<option value="">echo str_pad($i, 2, "0", STR_PAD_LEFT); ?></option>
<?php
}
?>
</select>
<select name="birthDate_y">
<option value=""></option>
<?php
for($i=date("Y"), $n=date("Y")-70; $i>=$n; $i--) {
?>
<option value="">echo $i; ?></option>
<?php
}
?>
</select>
</td>
</tr> - Сохраняем изменения в файле
Теперь исправляем непосредственно функцию сохранения нового пользователя, добавляя в нее сохранение введенной даты рождения пользователя. - Открываем файл /components/com_registration/registration.php
- Находим в нем строчку:
$row->registerDate = date( 'Y-m-d H:i:s' ); и вставляем после нее код: $birthD = intval( mosGetParam( $_POST, 'birthDate_d', 0 ) );
$birthM = intval( mosGetParam( $_POST, 'birthDate_m', 0 ) );
$birthY = intval( mosGetParam( $_POST, 'birthDate_y', 0 ) );
if ($birthD != 0 && $birthM != 0 & $birthY != 0) {
$row->birthDate = date( 'Y-m-d H:i:s', mktime (0,0,0,$birthM,$birthD,$birthY) );
} - Сохраняем изменения в файле
Небольшое примечание от yAnTar: для того, чтобы дата рождения пользователя была доступна из глобальной переменной $myнеобходимо сделать еще одну правку: - Открываем файл /includes/joomla.php
- Находим в нем строчку:
$query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation, params" и заменяем ее на:$query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation, params, birthDate" - Затем чуть ниже находим строчку:
$user->activation = $my->activation; и после нее добавляем:$user->birthDate = $my->birthDate; - Сохраняем изменения в файле
Ну вот вроде бы и все, осталось только проверить на деле.
|