Добавляем произвольные поля в Joomla!

Откройте phpMyAdmin и базу данных в которую установлена Joomla. И давайте добавим 2 новых поля в таблицу jos_users: website (website VARCHAR (255) not null) и gender (gender VARCHAR (3) not null) ну или выполните такой запрос в поле SQL запроса:

 ALTER TABLE `jos_users` ADD `website` VARCHAR( 255 ) NOT NULL , ADD `gender` VARCHAR( 20 ) NOT NULL

Продолжим. Откройте в любом текстовом редакторе(кроме Блокнота) файл {папка joomla}/libraries/joomla/database/table/user.php и после строки:

var $params = null;

Вставляем:

/**
* Description
*
* @var string
*/
var $website		= null;
/**
* Description
*
* @var string
*/
var $gender			= null;

Таким образом мы сообщим jooml'е, что необходимо добавить значения полей в базу данных. Теперь находим файл {папка joomla}/components/com_user/views/register/tmpl/default.php (строка 74) и открываем его.
Здесь нам необходимо добавить 2 поля в форму регистрации. Мы назовем их так же, как и поля в базе данных. Сверстаем тем же способом что и остальные поля — таблицей, смотрим:

<tr>
	<td height="40">
		<label for="website"><?php echo JText::_( 'WEBSITE' ); ?></label>
	</td>
	<td>
		<input type="text" id="website" name="website" size="40" value="http://" />
	</td>
</tr>
<tr>
	<td height="40"><?php echo JText::_( 'GENDER' ); ?></td>
	<td>
		<input type="radio" id="g_m" checked="true" name="gender" value="m" />
		<label for="g_m"><?php echo JText::_( 'MALE' ); ?></label>
		<br />
		<input type="radio" id="g_f" name="gender" value="f" />
		<label for="g_f"><?php echo JText::_( 'FEMALE' ); ?></label>
	</td>
</tr>

Вот что получится у вас на данный момент:

Немного пояснений.
Дело в том, что в Joomla, как и во всех системах управления сайтом есть мощная система управления языками и куча фишек для управления ими. Но для программиста, пишущего свой код под CMS должно быть еще больше подобных возможностей. Класс JText в Joomla довольно прост в использовании.
Давайте добавим в языковые файлы 4 строчки: WEBSITE, GENDER, MALE, FEMALE. Но для каждого компонента есть свой языковой файл. Открываем {папка joomla}/language/ru-RU/ru-RU.com_user.ini в любом текстовом редакторе и пишем в конце файла:

WEBSITE=Веб-сайт
GENDER=Пол
MALE=Мужской
FEMALE=Женский

Теперь откройте снова, и вот что у вас должно получиться:

Думаю, все легко и просто, никаких дополнительных действий не требуется.
Но вот в чем еще казус — пользователь наверное захочет отредактировать свои данные если что. Поэтому откроем файл {папка joomla}/components/com_user/views/user/tmpl/form.php (строка 70) и вписываем чуть измененный код с формы регистрации(добавлено чтение из базы данных определенного параметра):

<tr>
	<td height="40">
		<label for="website"><?php echo JText::_( 'WEBSITE' ); ?></label>
	</td>
	<td>
		<input type="text" id="website" name="website" size="40" value="<?php echo $this->escape($this->user->get('website'));?>" />
	</td>
</tr>
<tr>
<?php
$gend = $this->escape($this->user->get('gender'));
?>
	<td height="40"><?php echo JText::_( 'GENDER' ); ?></td>
	<td>
		<input type="radio" id="g_m" <?php if($gend=="m" or $gend==""): ?> checked="true" <?php endif; ?> name="gender" value="m" />
		<label for="g_m"><?php echo JText::_( 'MALE' ); ?></label>
		<br />
		<input type="radio" id="g_f" <?php if($gend=="f"): ?> checked="true" <?php endif; ?> name="gender" value="f" />
		<label for="g_f"><?php echo JText::_( 'FEMALE' ); ?></label>
	</td>
</tr>

Все. Теперь пользователь сможет отредактировать данные о себе:

Но возможность редактирования данных о пользователе должен иметь и администратор сайта. Теперь добавим эти поля в форму редактирования пользовательских данных в админ-панели.
Откроем файл {папка joomla}/administrator/components/com_users/view/user/tmpl/form.php (строка 133) и добавим в соответствии со стилем формы новые поля:

	<td>
		<label for="website"><?php echo JText::_( 'WEBSITE' ); ?></label>
	</td>
	<td>
		<input type="text" id="website" name="website" size="40" value="<?php echo $this->escape($this->user->get('website'));?>" />
	</td>
</tr>
<tr>
<?php
$gend = $this->escape($this->user->get('gender'));
?>
	<td><?php echo JText::_( 'GENDER' ); ?></td>
	<td>
		<input type="radio" id="g_m" <?php if($gend=="m" or $gend==""): ?> checked="true" <?php endif; ?> name="gender" value="m" />
		<label for="g_m"><?php echo JText::_( 'MALE' ); ?></label>
		<br />
		<input type="radio" id="g_f" <?php if($gend=="f"): ?> checked="true" <?php endif; ?> name="gender" value="f" />
		<label for="g_f"><?php echo JText::_( 'FEMALE' ); ?></label>
	</td>
</tr>

Вот что у нас получилось: