Вы здесь: Статьи Статьи по 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( &amp;$row, &amp;$params ) {
 
if ( ( $params->get( 'author' ) ) &amp;&amp; ( $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( &amp;$row, &amp;$params ) {
        global $my;
        if ( ( $params->get( 'author' ) ) &amp;&amp; ( $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

top-iconВверх

Комментарии  

Коммент от
Янв 16, 2009
Комментатор
Павел
0 Таким образом добавленное поле не видно потом из админки при просмотре пользователей и в меню пользователя.
Конечно, для "страны" это не актуально, но для поля, например, "телефон" необходимо.
Коммент от
Янв 18, 2009
Комментатор
Aleks_El_Dia
0 Цитирую Павел:
Таким образом добавленное поле не видно потом из админки при просмотре пользователей и в меню пользователя.
Конечно, для "страны" это не актуально, но для поля, например, "телефон" необходимо.

Безусловно. Если вас это интересует то ответьте, где бы вы хотели видеть это дополнительное поле и я напишу подробную инструкцию по этому вопросу.
Коммент от
Фев 01, 2009
Комментатор
Дмитрий
0 Вопрос очень актуальный с полем Страна (и город) - это же придется вбивать 191 страну (к примеру, если нужны все) - согласитесь, работа...

а в случае с полем Город ))

есть ли компонент, облегчающий задачу?

к примеру, если регистрация от СВ - может, есть какой-нить вариант?

повторюсь, тема актуальная, вопрос непраздный...
Коммент от
Фев 01, 2009
Комментатор
Павел
0 Цитирую Aleks_El_Dia:
Цитирую Павел:
Таким образом добавленное поле не видно потом из админки при просмотре пользователей и в меню пользователя.
Конечно, для "страны" это не актуально, но для поля, например, "телефон" необходимо.

Безусловно. Если вас это интересует то ответьте, где бы вы хотели видеть это дополнительное поле и я напишу подробную инструкцию по этому вопросу.

Например, человек заполняет кроме e-mail еще поле "телефон". Хотелось бы, чтобы администратор видел его при просмотре данных пользователя, и сам пользователь мог бы впоследствии его отредактировать (если поменялся номер телефона).
Коммент от
Фев 03, 2009
Комментатор
Aleks_El_Dia
0 На днях постараюсь сделать и выложить хак с полем для телефона с вашими пожеланиями
Коммент от
Фев 03, 2009
Комментатор
Дмитрий
0 упс... впечатление, будто меня здесь как бы и нет :-)

хоть бы написали, что, дескать, не знаете ответа...

ну да бог с ним... :-)
Коммент от
Фев 03, 2009
Комментатор
Павел
+1 Цитирую Дмитрий:
упс... впечатление, будто меня здесь как бы и нет :-)

хоть бы написали, что, дескать, не знаете ответа...

ну да бог с ним... :-)

Там же вместо выпадающего списка можно сделать просто текстовое поле, где пользователь вручную напишет страну (город)...

Вместо


Украина
Россия
Беларусь
Молдавия


Что-то вроде этого:
Коммент от
Фев 03, 2009
Комментатор
Павел
0 Блин, код не вставляется.
Коммент от
Фев 03, 2009
Комментатор
Aleks_El_Dia
0 Дмитрий, прошу прощения, Павел подсказал простой и логичный ответ.
Павел, какой код и куда на вставляется?
Коммент от
Фев 03, 2009
Комментатор
Павел
0 Цитирую Aleks_El_Dia:
Дмитрий, прошу прощения, Павел подсказал простой и логичный ответ.
Павел, какой код и куда на вставляется?

В комментарий. Хотел для наглядности код скопировать...

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

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

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

1.
Компонент Миграции с Joomla! 1.0.x на Joomla! 1.5.x
1446
2.
Хак постраничной навигации сайта на CMS Joomla!
485
3.
Дополнительное изменяемое поле "Телефон"
283

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

  • Спасибо большое за статью очень помогла ;-) .... д... Подробнее..
    От Benjamin Linus
  • Все проще. В файле plugins\system\ advancedmodule... Подробнее..
    От tvoyson
  • А где описание решения пункта 9? Подробнее..
    От Василий