Jabber'изация: Добавляем jabber в профиль

Вижу, что есть наметки, и в будущем джаббер/скайп/etc будут работать из коробки.
Ну а пока этого нет — приходится делать самостоятельно.

1. добавляем нужное поле в базу
alter table prefix_user add user_profile_jabber varchar(150) after user_profile_icq;


2. в файле templates/language/russian.php находим строку:
'settings_profile_icq' => 'ICQ',
и после нее добавляем:
'settings_profile_jabber' => 'Jabber',


3. в файле classes/actions/ActionSettings.class.php находим

                                $this->oUserCurrent->setProfileIcq(null);
                        }
и после этого добавляем:
/**
 * Проверяем Jabber
 */
 if (func_check(getRequest('profile_jabber'),'text',1,150)) {
     $this->oUserCurrent->setProfileJabber(getRequest('profile_jabber'));
 } else {
     $this->oUserCurrent->setProfileJabber(null);
 }


4. в файле classes/modules/user/entity/User.entity.class.php
находим:
return $this->_aData['user_profile_icq'];
    }
после этого добавляем:
public function getProfileJabber() {
        return $this->_aData['user_profile_jabber'];
    }

находим:
$this->_aData['user_profile_icq']=$data;
    }
после этого добавляем:
public function setProfileJabber($data) {
        $this->_aData['user_profile_jabber']=$data;
    }

В файле classes/modules/user/mapper/User.mapper.class.php
находим:
user_profile_icq = ? ,
после этого добавляем
user_profile_jabber = ? ,

находим:
$oUser->getProfileIcq(),
после добавляем:
$oUser->getProfileJabber(),


5. И последнее — правка шаблонов:
в файле: templates/skin/<имя-вашей-темы>/actions/ActionSettings/profile.tpl находим строку:
<p><label for="profile_icq">{$aLang.settings_profile_icq}:</label><br /><input type="text" class="w300" name="profile_icq" id="profile_icq" value="{$oUserCurrent->getProfileIcq()|escape:'html'}"/></p>
и после нее добавляем
<p><label for="profile_jabber">{$aLang.settings_profile_jabber}:</label><br /><input type="text" class="w300" name="profile_jabber" id="profile_jabber" value="{$oUserCurrent->getProfileJabber()|escape:'html'}"/></p>


в файле templates/skin/<имя-вашей-темы>/actions/ActionProfile/sidebar.tpl находим блок:

                                {if $oUserProfile->getProfileIcq()}
                                <strong>{$aLang.profile_social_contacts}</strong>
                                <ul>
                                        {if $oUserProfile->getProfileIcq()}
                                                <li class="icq"><a href="http://www.icq.com/people/about_me.php?uin={$oUserProfile->getProfileIcq()|escape:'html'}" target="_blank">{$oUserProfile->getProfileIcq()}</a></li>
                                        {/if}
и заменяем его на:

                                {if $oUserProfile->getProfileIcq() || $oUserProfile->GetProfileJabber()}
                                <strong>{$aLang.profile_social_contacts}</strong>
                                <ul>
                                        {if $oUserProfile->getProfileIcq()}
                                                <li class="icq"><a href="http://www.icq.com/people/about_me.php?uin={$oUserProfile->getProfileIcq()|escape:'html'}" target="_blank">{$oUserProfile->getProfileIcq()}</a></li>
                                        {/if}
                                        {if $oUserProfile->getProfileJabber()}
                                                <li class="jabber">{$oUserProfile->getProfileJabber()|escape:'html'}</li>
                                        {/if}

33 комментария

avatar
молодец. добавляй тогда уж остальные контакты (SIP, Skype, mail.ru vkontakte.ru) и выкладывай в модули :)
avatar
думаю вначале сделать оповещение через джаббер, а не мыло :)
avatar
Кстати задумка хорошая с добавлением и других контактов!
Пуду ждать и ругих добавлений:
SIP
Skype
QIP
AgentMail
Телефон
рабочий
Мобтльный
avatar
На основе данного поста за 20 минут все это можно добавить.
avatar
Наконец-то… сам хотел сделать, но всё некогда было)
avatar
кому интересно: XML модификатор для LSMI
комментарий был удален
avatar
После установки через модинсталлер такая ошибка:
Parse error: syntax error, unexpected $end in /hsphere/local/home/****.ru/classes/modules/user/mapper/User.mapper.class.php on line 723
avatar
Понятно. Известная проблема. Откройте этот файл, он обрезан в конце. И добавьте недостающую часть (срез из оригинального файла). Это болезнь некоторых серверов, но я с этим борюсь.
avatar
И вообще если на локалхосте под виндой тестите — то это почти неизлечимо. Нужно пересобирать Apache с PHP из официальных репозиториев.
avatar
Linux s22.leaderhost.ru 2.6.18-92.el5 #1 SMP Tue Jun 10 18:49:47 EDT 2008 i686
avatar
Я копаю, но логику ошибки понять пока не получилось)
avatar
Логика бага найдена, в процессе исправления :)
avatar
Всем добрый день!
Проделал описанную процедуру, но добавлял другое поле: «Место работы»
Уперся в баг — вбиваю поле, жму сохранить и введенное значение сохраняется вместо стандартного поля «Город». Проверил все файлы, вроде нигде не ошибся и использую новый profileJob

Помогите, плиз
avatar
очевидно, что где-то попутаны названия полей )
avatar
нашел ошибку
setProfileJabber не заменил на свое :)
avatar
Спасибо! на основе вашего поста добавил некоторое количество полей в свой проект!
Все вроде работает.
avatar
Вопрос, Как сделать поле типа Аватар? Чтобы юзер мог загрузить юзербар
avatar
Пытался сделать на примере Фото, но что-то картинка не загружается.
* Загрузка юзербара, делаем ресайзы
			 */			
			if (isset($_FILES['foto']) and is_uploaded_file($_FILES['foto']['tmp_name'])) {				
				if ($sFileUserbar=$this->User_UploadUserbar($_FILES['foto'],$this->oUserCurrent)) {	
					$this->oUserCurrent->setProfileFoto($sFilefoto);			
				} else {
					$bError=true;
					$this->Message_AddError($this->Lang_Get('settings_profile_userbar_error'),$this->Lang_Get('error'));
				}
			}
			/**
			 * Удалить юзербар
			 */
			if (isset($_REQUEST['userbar_delete'])) {
				$this->User_DeleteUserbar($this->oUserCurrent);
				$this->oUserCurrent->setProfileUserbar(null);
			}
avatar
а картинку куда добавлять?????
avatar
Спасибо…
Но у меня проблема, созданное поле есть, но когда в настройках ввожу его значение, нажимаю сохранить, оно опять очищается. Т.е. не сохраняется значение в таблице базы данных. Я проверял на ошибки 10 раз уже, вроде всё ок.
Я думаю уже в сторону того, что кнопка «сохранить» не подтверждает ввод этого поля.
Помогите кто-нибудь советом.
Спасибо.
avatar
Всё понимаю, но не проще ли просто скачать плагин Социальные сервисы и им воспользоваться?
avatar
У меня поля другие — фамилия, интересы, любимые места и пр.
Вот если бы был плагин «конструктор полей профиля», то было бы проще.
avatar
Есть такой.
avatar
О, а я и не знал. А как он называется?
avatar
Он не для всех.
avatar
все что вводите от бд до actionsettings.tpl кратко в студию
avatar
В templates/language/russian.php:

'settings_profile_name' => 'Имя',
'settings_profile_surname' => 'Фамилия',


Запрос к SQL:
alter table prefix_user add user_profile_surname varchar(100) after user_profile_name;


В ActionSettings.class.php:

/**
 * Проверяем фамилию
*/
if (func_check(getRequest('profile_surname'),'text',1,100)) {
	$this->oUserCurrent->setProfileSurname(getRequest('profile_surname'));
} else {
	$this->oUserCurrent->setProfileSurname(null);


В User.entity.class.php:
В начале странице (там, где подобные этой записи) вот это:

	public function getProfileSurname() {
        return $this->_aData['user_profile_surname'];	
    }

Потом, такой код:

	public function setProfileSurname($data) {
		$this->_aData['user_profile_surname']=$data;
	}


В файле User.mapper.class.php

	public function Update(ModuleUser_EntityUser $oUser) {
		$sql = "UPDATE ".Config::Get('db.table.user')." 
			SET 
				user_profile_name = ? , 
				user_profile_surname = ? , 



if ($this->oDb->query($sql,$oUser->getPassword(),
						$oUser->getMail(),								   
						$oUser->getSkill(),								   
						$oUser->getDateActivate(),
						$oUser->getDateCommentLast(),							   
						$oUser->getRating(),
						$oUser->getCountVote(),
						$oUser->getActivate(),								   
						$oUser->getProfileName(),
						$oUser->getProfileSurname(),
						$oUser->getProfileSex(),


Т.е. оно ему дает запрос обновлять эту таблицу! Во всех местах surname я вводил сразу после name. Стандартное поле namt работает исправно.

В шаблоне:

	<dl class="form-item">

	<dd><label for="profile_surname">{$aLang.settings_profile_surname}:</label></dd>

	<dt><input type="text" name="profile_surname" id="profile_surname" value="{$oUserCurrent->getProfileSurname()|escape:'html'}" class="input-200" /></dt>

	</dl>


Спасибо большое, если поможете.
avatar
Кстати, можете проверить, сайт — horses.org.ua.
Логин — test
Пароль— test1
avatar
посмотрел вроде все правильно, сделал у себя все в точности как у вас все работает. У вас в ActionSettings.class.php после

**
 * Проверяем фамилию
*/
if (func_check(getRequest('profile_surname'),'text',1,100)) {
        $this->oUserCurrent->setProfileSurname(getRequest('profile_surname'));
} else {
        $this->oUserCurrent->setProfileSurname(null);

фигурная скобка стоит? или вы просто здесь не написали ее? может ошибка могла возникнуть, когда вы разделяли настройки по страницам.
avatar
Да, спасибо за помощь. Скобка стоит. Настройки по страницам — это прикол шаблона Social. Там в шаблоне имя так же оформлено, оно работает исправно. Хрен его знает что такое...(
avatar
Большое cпаcибо за такое понятное и хорошее объяcнение. Неcколько чаcов билаcь c этими полями, а тут вcе доходчиво показано. Еще раз cпаcибо.
avatar
Хочу сделать раздельные поля «Имя» и «Фамилия» (сейчас это одним полем почему-то).
Не поплывёт ли шаблон Mirage?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.