Во время создания очередного интернет-проекта ввиду его интернациональности родилась следующая идея - возле вывода автора статьи вывести его страну. После нескольких манипуляций и хаков парочки файлов 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.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>
<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
| < Предыдущая | Следующая > |
|---|
.... д...
Комментарии
Коммент от
Янв 16, 2009Комментатор
ПавелКонечно, для "страны" это не актуально, но для поля, например, "телефон" необходимо.
Коммент от
Янв 18, 2009Комментатор
Aleks_El_DiaБезусловно. Если вас это интересует то ответьте, где бы вы хотели видеть это дополнительное поле и я напишу подробную инструкцию по этому вопросу.
Коммент от
Фев 01, 2009Комментатор
Дмитрийа в случае с полем Город ))
есть ли компонент, облегчающий задачу?
к примеру, если регистрация от СВ - может, есть какой-нить вариант?
повторюсь, тема актуальная, вопрос непраздный...
Коммент от
Фев 01, 2009Комментатор
ПавелНапример, человек заполняет кроме e-mail еще поле "телефон". Хотелось бы, чтобы администратор видел его при просмотре данных пользователя, и сам пользователь мог бы впоследствии его отредактировать (если поменялся номер телефона).
Коммент от
Фев 03, 2009Комментатор
Aleks_El_DiaКоммент от
Фев 03, 2009Комментатор
Дмитрийхоть бы написали, что, дескать, не знаете ответа...
ну да бог с ним...
Коммент от
Фев 03, 2009Комментатор
ПавелТам же вместо выпадающего списка можно сделать просто текстовое поле, где пользователь вручную напишет страну (город)...
Вместо
Украина
Россия
Беларусь
Молдавия
Что-то вроде этого:
Коммент от
Фев 03, 2009Комментатор
ПавелКоммент от
Фев 03, 2009Комментатор
Aleks_El_DiaПавел, какой код и куда на вставляется?
Коммент от
Фев 03, 2009Комментатор
ПавелВ комментарий. Хотел для наглядности код скопировать...
RSS лента комментариев этой записи