kurteev

Добавляем в форму регистрации Joomla 1.0 поле Дата рождения

  • 09.10.2007

Периодически на форуме спрашивают, как добавить то или иное поле в форму регистрации пользователей Joomla. И почти всегда их отправляют читать разделы и документацию по компоненту CommunityBuilder — действительно мощному решению для расширения профайлов пользователей Joomla. Однако не всегда это нужно. Иногда требуется всего одно-два поля, а приходится ставить целый компонент. В этой статье я хочу рассказать, как вручную добавить поле в форуму регистрации пользователей.

Перед началом модификаций рекомендую создать резервную копию изменяемых файлов. Если у вас вдруг что-то не получится наличие резервной копии позволит вам откатить изменения и восстановить работоспособность сайта.

Для начала необходимо добавить такое поле в таблицу jos_users, чтобы можно было хранить введенную пользователем информацию. Для этого выполним в phpMyAdmin следующий запрос:

ALTER TABLE `jos_users` ADD `birthDate` DATETIME NOT NULL default '0000-00-00 00:00:00';

После этого расширим набор полей класса mosUser, чтобы данные о дате рождения автоматически попадали в базу при регистрации пользователя.

  1. Открываем файл /includes/joomla.php
  2. Находим в нем строчки:
    	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 ) {
  3. Сохраняем изменения в файле

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

  1. Открываем файл /components/com_registration/registration.html.php
  2. Находим в нем строчки:
    		 		<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="<?php echo $i; ?>"><?php 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="<?php echo $i; ?>"><?php 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="<?php echo $i; ?>"><?php echo $i; ?></option>
    <?php
    					}
    ?>			    	
    			    </select>
    			</td>
    		</tr>
    
  3. Сохраняем изменения в файле

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

  1. Открываем файл /components/com_registration/registration.php
  2. Находим в нем строчку:
    $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) );	
    	}
  3. Сохраняем изменения в файле

Небольшое примечание от yAnTar: для того, чтобы дата рождения пользователя была доступна из глобальной переменной $my необходимо сделать еще одну правку:

  1. Открываем файл /includes/joomla.php
  2. Находим в нем строчку:
    $query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation, params"
    и заменяем ее на:
    $query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation, params, birthDate"
  3. Затем чуть ниже находим строчку:
    $user->activation		= $my->activation;
    и после нее добавляем:
    $user->birthDate		= $my->birthDate;
  4. Сохраняем изменения в файле

Ну вот вроде бы и все, осталось только проверить на деле.

Желаю успешных экспериментов, жду отзывов и вопросов на форуме!

Это интересно:

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Скачать Joomla! 3 Документация Joomla! CMS Свернуть

Новости портала

Новое в блогах

Видео