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

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

В некоторых ситуациях необходимо при регистрации получить информацию о номере телефона пользователя. Для этого необходимо в форме регистрации создать дополнительное поле для ввода номера телефона. Ко всему прочему должна быть возможность вносить изменения в это поле, как администратору сайта, так и непосредственно пользователю, в случае если номер телефона изменился.
В этой статье я в подробностях напишу, каким образом реализовать вышеописанный пример.
Для реализации этого небольшого хака нам понадобятся следующие файлы:
  • /includes/joomla.php
  • /components/com_registration/registration.html.php
  • /components/com_registration/registration.php
  • /components/com_user/user.html.php
  • /administrator/components/com_users/admin.users.php
  • /administrator/components/com_users/admin.users.html.php

! Настоятельно рекомендую сделать резервную копию этих файлов перед внесением в них изменений !

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

ALTER TABLE `jos_users` ADD `telephone` VARCHAR(255) NOT NULL default '';

2. Далее необходимо расширить набор полей класса mosUser, чтобы данные о телефоне пользователя автоматически попадали в базу при его регистрации.
Открываем файл /includes/joomla.php
Находим в нем следующие строчки:

  var $params      = null; 
/**
* @param database A database connector object
*/
function mosUser( &$database ) {

После!:

var $params= null; 

вставляем строку:

var $telephone = null; 

В этом же файле находим:

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

Заменяем! на:

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

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

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

После! нее добавляем:

$user->telephone    = $my->telephone;
Это необходимо для того, чтобы страна пользователя была доступна из глобальной переменной $my.
Первая часть подготовки выполнена, теперь необходимо добавить непосредственно поле на форму регистрации, и подправить функцию сохранения нового пользователя.


3. Открываем файл /components/com_registration/registration.html.php
Находим в нем строчки:

<tr><td><?php echo _REGISTER_EMAIL; ?> *

Над! ней вставляем:

<tr>
<td width="30%">Номер вашего телефона:</td>
<td><input type="text" name="telephone" size="40"
value="" class="inputbox" maxlength="50" /></td>
</tr>
4.Теперь исправляем непосредственно функцию сохранения нового пользователя, добавляя в нее сохранение введенной страны пользователя.
Открываем файл /components/com_registration/registration.php
Находим в нем строчку:
$row->registerDate   = date( 'Y-m-d H:i:s' ); 

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

$row->telephone  = mosGetParam($_POST, 'telephone', ''); 
Данные введенные пользователем получены и записаны в базу данных.

5.Выведем поле «Телефон» в настройках пользователей в админке:
Открываем файл /administrator/components/com_users/admin.users.php
Находим строчки (примерно 213-216):
// load the row from the db table
$row->load( (int)$uid );
if ( $uid ) {

Чуть ниже!, после строки:

$row->username = trim( $row->username );

Вставляем следующую строку:

$row->telephone = trim( $row->telephone );
6.Теперь непосредственно выводим новое поле «Телефон» в настройках пользователя в административной части сайта:

Открываем файл /administrator/components/com_users/admin.users.html.php

Ищем примерно 237 строку:
<input class="inputbox" type="text" name="email" 
size="40" value="<?php echo $row->email; ?>" />

Чуть выше будет примерно следующий код (может отличаться в разных версиях Joomla!)

<tr>
<td>E-mail:</td>
<td>

Сразу над! ним вставляем:

<tr>
<td>Номер телефона пользователя:</td>
<td><input type="text" name="telephone" class="inputbox"
size="40" value="<?php echo $row->telephone; ?>" maxlength="25" />
</td>
</tr>

7.Выводим поле телефона в фронтальной части сайта, и добавляем возможность редактирования этого поля пользователем
Открываем файл /components/com_user/user.html.php
Находим примерно 104 строку:

<?php echo _EMAIL; ?>

Чуть выше, сразу над:

<tr><td>

вставляем следующий код:

<tr>
<td>Мой номер телефона:</td>
<td><input class="inputbox" type="text" name="telephone"
value="<?php echo $row->telephone;?>" size="40" />
</td>
</tr>
Жду комменатрии

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

Комментарии  

Коммент от
Фев 06, 2009
Комментатор
Павел
+2 Спасибо, друг! Будем пробовать!
Коммент от
Фев 06, 2009
Комментатор
Aleks_El_Dia
+1 Цитирую Павел:
Спасибо, друг! Будем пробовать!
Не за что ;-) Жду отзывы :roll:
Коммент от
Фев 10, 2009
Комментатор
Talgat
0 Присоединяюсь к Павлу!!!
:lol:
Коммент от
Фев 10, 2009
Комментатор
Talgat
0 Чето сделал все: поле выводит, редактировать его можно, а вот не сохраняет в базу данных и не выводит???
Коммент от
Фев 10, 2009
Комментатор
Aleks_El_Dia
0 Цитирую Talgat:
Чето сделал все: поле выводит, редактировать его можно, а вот не сохраняет в базу данных и не выводит???
Запрос из пункта 1 выполнен правильно? Проверьте, создалось ли новое поле?
Коммент от
Фев 11, 2009
Комментатор
Talgat
+1 Цитирую Aleks_El_Dia:
Цитирую Talgat:
Чето сделал все: поле выводит, редактировать его можно, а вот не сохраняет в базу данных и не выводит???
Запрос из пункта 1 выполнен правильно? Проверьте, создалось ли новое поле?

Сорри. Все нормально. Поля я сделал вручную. Просто В файле joomla.php изменения не сохранились. Пришлось ввести заново. Спасибо!!!
Коммент от
Фев 11, 2009
Комментатор
Aleks_El_Dia
0 Отлично. Павел. у Вас тоже все правильно работает?
Коммент от
Фев 22, 2009
Комментатор
Vladislav
0 Статья супер!
Только вместо $row->telephone = mosGetParam($_P OST, 'telephone', ''); чуть выше, нашёл код $row->name = trim($row->name); и дописал $row-> telephone = trim($row-> telephone);
и вместо "Номер вашего телефона:" написал "echo _PHONE;" (теги php нужно ещё прописать. Здесь упустил чтобы не вырезалось в комментариях) чтобы красоту кода не нарушать :-). Ну и соответственно, добавил переменную в russian.php. Но, это не принципиально)
Коммент от
Фев 22, 2009
Комментатор
Aleks_El_Dia
0 Это, как говорится, варианты :-)
Можно и языковую переменную добавить, но я пошел по пути наименьшего количества файлов, которые нужно править ;-)
Коммент от
Апр 09, 2009
Комментатор
Оeka
0 Все отлично получилось, но я добавлял пункт Фамилия, но прописалось ????? ???? Подскажите как ему дать понять что это рус шрифт?

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

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

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

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

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

  • Спасибо, действительно, больше нигде нормальных ша... Подробнее..
    От Lewkee
  • Опишите последовательно ваши действия. Подробнее..
    От Aleks_El_Dia
  • Алекс! Нелишне поменять местами иконки кнопок Down... Подробнее..
    От Раиса