Вы здесь: Статьи Статьи о Joomla! Добавление дополнительного поля при регистрации пользователя

Добавление дополнительного поля при регистрации пользователя

Во время создания очередного интернет-проекта ввиду его интернациональности родилась следующая идея - возле вывода автора статьи вывести его страну. После нескольких манипуляций и хаков парочки файлов CMS Joomla! 1.0.x поставленая цель была достигнута.
Итак эта тема поможет вам:
1. Научится добавлять дополнительные поля при регистрации пользователя.
2. Выводить значение этого поля в любом нужном месте.
Для решения данного вопроса я руководствовался статьей "Добавляем в форму регистрации поле Дата рождения"

Итак что необходимо сделать:
1.Для начала необходимо добавить такое поле в таблицу jos_users, чтобы можно было хранить введенную пользователем информацию. Для этого выполним в phpMyAdmin следующий запрос:
ALTER TABLE `jos_users` ADD `country` VARCHAR(255) NOT NULL default '';

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

2.1 Открываем файл /includes/joomla.php
2.2 Находим в нем следующие строчки:
  var $params      = null;

/**
* @param database A database connector object
*/

function mosUser( &$database ) {

2.3 Заменяем их на:

        var $params                = null;
var $country = null;

/**
* @param database A database connector object
*/

function mosUser( &$database ) {

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

$query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation, params"

2.5 Заменяем на:

$query = "SELECT id, name, email, block, sendEmail, registerDate, lastvisitDate, activation,
params, country"

2.6 Ниже находим строчку:

$user->activation    = $my->activation;

2.7 И после! нее добавляем:

$user->country       = $my->country;

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


3. Открываем файл /components/com_registration/registration.html.php
3.1 Находим в нем строчки:
<input type="text" name="name" size="40" value="" class="inputbox" maxlength="50"         />
</td>
</tr>

3.2 Вставляем после! них код:
<td>
Ваша страна
</td>
<td>
<select name="country">
<option value="Украина">Украина</option>
<option value="Россия">Россия</option>
<option value="Беларусь">Беларусь</option>
<option value="Молдавия">Молдавия</option>
</select>

</td>
При необходимости можно изменить список или дополнить его. Значение атрибута value будет записыватся в базу данных.

4.Теперь исправляем непосредственно функцию сохранения нового пользователя, добавляя в нее сохранение введенной страны пользователя.
Открываем файл /components/com_registration/registration.php
4.1 Находим в нем строчку:
$row->registerDate   = date( 'Y-m-d H:i:s' );

4.2 Вставляем после! нее следующий код:

$row->country     = mosGetParam($_POST, 'country', '');

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

5. Для этого необходимо открыть файл /components/com_content/content.html.php
5.1 Находим следующие строчки:
/**
* Writes Author name
*/
function Author( &$row, &$params ) {
if ( ( $params->get( 'author' ) ) && ( $row->author != '' ) ) {
?>
<tr>
<td width="70%" align="left" valign="top" colspan="2">
<span class="small">
<?php echo _WRITTEN_BY . ' '.( $row->created_by_alias ? $row->
created_by_alias : $row->author ); ?>
</span>
</td>
</tr>
<?php
}
}

5.2 Меняем их на:

/**  
* Writes Author name
*/
function Author( &$row, &$params ) {
global $my;
if ( ( $params->get( 'author' ) ) && ( $row->author != '' ) ) {
global $database;
$query = "SELECT country"
. "\n FROM #__users"
. "\n WHERE id = " . (int) $row->created_by
;
$database->setQuery( $query );
$row->country = $database->loadResult();
?>
<tr>
<td width="70%" align="left" valign="top" colspan="2">
<span class="small">
<?php echo _WRITTEN_BY . ' '.( $row->created_by_alias? $row->
created_by_alias : $row->author ).', '.$row->country;
?>
</span>

</td>
</tr>
<?php
}
}

P.S.: Хак опробован на CMS Joomla! 1.0.15 и CMS Joomla! 1.0.15 RE
P.P.S.: Если вам лень проделывать эти махинации, Вы можете скачать с файлового архива (примерно здесь) готовые хакнутые файлы, заменить ими оригинальные (предварительно сделав резервную копию!) и выполнить запрос с п.1 в phpMyAdmin

Комментарии  

Коммент от
Сен 15, 2009
Комментатор
Aleks_El_Dia
0 Постараюсь скоро написать отдельную статью по вашему вопросу.
Коммент от
Фев 11, 2010
Комментатор
Link
+1 Сайт полезный много хорошой инфы о Жумле.
Коммент от
Апр 23, 2010
Комментатор
kos_ua
0 НЕ по теме конешно, но всеравно задам такой вопрос. У меня жумала 1..5.15 и мне нужно подобовлять поля как описано в стать выше, НО файле joomla.php всего пара строк а именно:
/**
* Legacy Mode compatibility
* @version $Id: joomla.php 10381 2008-06-01 03:35:53Z pasamio $
* @package Jooml a.Legacy
*/
require_once( dirname( __FILE__ ) . '/application.p hp' );
Помогите пожалуйста.
Коммент от
Апр 23, 2010
Комментатор
Aleks_El_Dia
0 Цитирую kos_ua:
НЕ по теме конешно, но всеравно задам такой вопрос. У меня жумала 1..5.15 и мне нужно подобовлять поля как описано в стать выше
Переписывать статью под 1.5 не имеет смысла, поскольку в инете достаточно статей об этом - наиболее просто и детально расписал beliyadm

Оставить комментарий

Защитный код
Обновить

Популярные файлы

1.
Компонент Миграции с Joomla! 1.0.x на Joomla! 1.5.x
3023
2.
Хак постраничной навигации сайта на CMS Joomla! 1.0
1638
3.
rt-reaction
814

Последние комментарии

  • Темный шаблон то что надо. Респект! Подробнее..
    От Dunko
  • Но я вам точно могу сказать, что человек, сделавш... Подробнее..
    От Ломалкин
  • Обновлять нужно и саму Джумлу и те модули, которы... Подробнее..
    От Ломалкин
лучшие русские мелодрамы 2011