LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
28.05.2012, 00:30:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Аватары и Jomsocial  (Прочитано 5521 раз)
0 Пользователей и 1 Гость смотрят эту тему.
creeon
Гость
« : 04.03.2009, 22:56:31 »

Будет ли поддержка аватаров для Jomsocial ?????????????????  Huh
Или как это сделать? Спасибо.
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #1 : 04.03.2009, 23:22:06 »

Во-первых, вы уже одну тему на форуме по данному вопросу создали, во-вторых с момента публикации предыдущей темы сутки еще не прошли, так что поднимать вопрос заново оснований нет, в-третьих от большого количества вопросительных знаков, ваш вопрос более важным не станет.

Если вам это так срочно нужно и вам невтерпеж - вешайте объявление в коммерческом разделе, вполне возможно кто-нибудь и возьмется.

Потенциально - да, будет такая поддержка, но потом. Сейчас у меня на это времени нет.
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #2 : 10.03.2009, 00:39:51 »

Посидел, наваял, т.к. самому надо.


файл \www\plugins\jcomments\jcomments.avatar.xml, в строку 27, добавить (до закрытия тега params):
Код:
<option value="js">JomSocial</option>


файл \www\plugins\jcomments\jcomments.avatar.php, в строке 452, добавить
Код:
case 'js':
require_once( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php');

foreach ($users as $user) {
$instance = new CUser($user);
$instance->init();
$avatars[$user]->avatar=$instance->getThumbAvatar();
$avatars[$user]->id=CRoute::_('index.php?option=com_community&view=profile&userid='.$user);
}

for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = $comments[$i]->userid;
if (isset($avatars[$userid])) {
$avatarFile = $avatars[$userid]->avatar;
$comments[$i]->avatar = '<img src="'. $avatarFile .'" alt="" border="0" />';
} else {
$comments[$i]->avatar = $noavatar;
}
if ($avatar_link && isset($avatars[$userid])) {
$comments[$i]->avatar = '<a href="'. JoomlaTuneRoute::_($profileLink . $avatars[$userid]->id) . '" target="_blank">' . $comments[$i]->avatar . '</a>';
}
$comments[$i]->profileLink = (intval($userid)) ? JoomlaTuneRoute::_($profileLink . $avatars[$userid]->id) : '';
}
unset($avatars);
break;

После чего, в настройках плагина jcomments.avatar появляется возможность выбора JomSocial
На моем сайте этот код выглядит немного иначе по некоторым причинам, но вышеприведенное должно работать. Проверяйте и исправляйте если есть ошибки. Надеюсь, Сергей включит это в след. релиз плагина.
Записан
creeon
Гость
« Ответ #3 : 10.03.2009, 23:05:57 »

Тестил в лисе и експлоере.
Все работает зашибись большой респект   Grin Cheesy
Записан
abbyevg
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Пол: Мужской
Сообщений: 92


эвилпанда


« Ответ #4 : 11.03.2009, 15:54:41 »

Небольшая поправка для jcomments.avatar.php, для корректной ссылки на профайл пользователя через аватар:

> В файл \www\plugins\jcomments\jcomments.avatar.php, в строке 452, добавить

Код:
case 'js':
require_once( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php');

foreach ($users as $user) {
$instance = new CUser($user);
$instance->init();
$avatars[$user]->avatar=$instance->getThumbAvatar();
$avatars[$user]->id=CRoute::_('index.php?option=com_community&view=profile&userid='.$user);
}

for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = $comments[$i]->userid;
if (isset($avatars[$userid])) {
$avatarFile = $avatars[$userid]->avatar;
$comments[$i]->avatar = '<img src="'. $avatarFile .'" alt="" border="0" />';
} else {
$comments[$i]->avatar = $noavatar;
}
if ($avatar_link && isset($avatars[$userid])) {
$comments[$i]->avatar = '<a href="'. $avatars[$userid]->id . '" >' . $comments[$i]->avatar . '</a>';
}
$comments[$i]->profileLink = (intval($userid)) ? $avatars[$userid]->id : '';
}
unset($avatars);
break;
Записан
4.n
Осваиваюсь на форуме
***

Репутация: +19/-0
Offline Offline

Пол: Мужской
Сообщений: 139


StCrox ™


« Ответ #5 : 24.04.2009, 17:48:24 »

Спасибо!
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #6 : 24.04.2009, 17:57:20 »

Надеюсь, Сергей включит это в след. релиз плагина.
выключу но после серьезной переработки. есть проблема с производительностью, так как код:

Код
			foreach ($users as $user) {
$instance = new CUser($user);
$instance->init();
$avatars[$user]->avatar=$instance->getThumbAvatar();
$avatars[$user]->id=CRoute::_('index.php?option=com_community&view=profile&userid='.$user);
}
добавит на страницу с комментариями столько запросов к БД, сколько пользователей участвовало в обсуждении... именно поэтому, для других компонентов, я выбираю данные прямо с БД, и в результате мы получаем 1 запрос, вместо целой пачки.

Так что для того, чтобы эта интеграция была полностью корректна - надо мне немного поковыряться в потрохах у JomSocial
Записан
waraxeman
Захожу иногда
**

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 22


« Ответ #7 : 26.04.2009, 20:45:13 »

У меня почему то не работает выше приведенные коды, JomSocial 1.1.145 и JComment 2.0. Отображается пустой аватар
« Последнее редактирование: 26.04.2009, 21:22:19 от waraxeman » Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #8 : 30.04.2009, 01:24:06 »

Я пока пользуюусь таким вариантом:

Код
		case 'js':
require_once( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php');
 
for ($i=0,$n=count($comments); $i < $n; $i++)
{
$userid = $comments[$i]->userid;
 
$user = &CFactory::getUser($userid);
 
$comments[$i]->avatar = '<img src="'.$user->getThumbAvatar().'" alt="" border="0" />';
 
if ($avatar_link && $userid) {
$userLink = CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid);
$comments[$i]->avatar = '<a href="'. $userLink .'" target="_blank">' . $comments[$i]->avatar . '</a>';
}
 
$comments[$i]->profileLink = '<a href="'.$userLink.'" title="'.$user->getDisplayName().'"></a>';
}
break;
« Последнее редактирование: 30.04.2009, 02:07:52 от bzzik » Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #9 : 30.04.2009, 02:03:55 »

А вот и производительный вариант, который Серж я надеюсь возьмёт на вооружение:

Код
		case 'js':
if (count($users)) {
$db->setQuery('SELECT userid, thumb as avatar FROM #__community_users WHERE userid in (' . implode(',', $users)  . ')');
$avatars = $db->loadObjectList('userid');
unset($users);
} else {
$avatars = array();
}
 
require_once( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php');
 
for ($i=0,$n=count($comments); $i < $n; $i++)
{
$userid = $comments[$i]->userid;
$comments[$i]->avatar = '<img src="' . JURI::root() . $avatars[$userid]->avatar .'" alt="" border="0" />';
 
if ($avatar_link && isset($avatars[$userid])) {
$userLink = CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid);
$comments[$i]->avatar = '<a href="'. $userLink .'" target="_blank">' . $comments[$i]->avatar . '</a>';
}
 
$comments[$i]->profileLink = '<a href="'.$userLink.'" title=""></a>';
}
unset($avatars);
 
break;
Так как $avatars[$userid]->avatar существует всегда, то $noavatar вообще не использовался.

Я у себя его проверил - работает!  Cheesy
« Последнее редактирование: 30.04.2009, 02:08:14 от bzzik » Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #10 : 30.04.2009, 09:45:10 »

Так как $avatars[$userid]->avatar существует всегда, то $noavatar вообще не использовался.
во-первых, он не всегда существует... ведь если в списке комментарии от гостей, то массив $users будет пустой, и $avatars тоже..

во-вторых строчку:
Код
$comments[$i]->profileLink = '<a href="'.$userLink.'" title=""></a>';
нужно тоже включить в условие, что чуть выше... ведь иначе возможна ситуация, когда переменная $userLink не определена...

и в-третьих, а что они в базе хранят относительный путь к картинке? почему тут напрямую используется avatar прочитанный из базы в качестве пути к изображению?
Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #11 : 30.04.2009, 10:13:20 »

Блин, про гостей забыл! Спасибо за напоминание. Что касается хранения аватарок - в базе путь вот такой images/avatar/thumb_6df1e1aed5ee42be5adcd3e9.jpg

Вроде сейчас всё учёл?

Код
case 'js':
if (count($users)) {
$db->setQuery('SELECT userid, thumb as avatar FROM #__community_users WHERE userid in (' . implode(',', $users)  . ')');
$avatars = $db->loadObjectList('userid');
unset($users);
} else {
$avatars = array();
}
 
require_once( JPATH_BASE . DS . 'components' . DS . 'com_community' . DS . 'libraries' . DS . 'core.php');
 
for ($i=0,$n=count($comments); $i < $n; $i++)
{
$userid = $comments[$i]->userid;
if (isset($avatars[$userid]->avatar))
{
$comments[$i]->avatar = '<img src="' . JURI::root() . $avatars[$userid]->avatar .'" alt="" border="0" />';
}
else
{
$comments[$i]->avatar = $noavatar;
}
 
if ($avatar_link && isset($avatars[$userid])) {
$userLink = CRoute::_('index.php?option=com_community&view=profile&userid=' . $userid);
$comments[$i]->avatar = '<a href="'. $userLink .'" target="_blank">' . $comments[$i]->avatar . '</a>';
$comments[$i]->profileLink = '<a href="'.$userLink.'" title=""></a>';
}
else
{
$comments[$i]->profileLink = '';
}
}
unset($avatars);
 
break;
Хмм, хотя я сечйас проверил - если не залогинен, то аваратки не показываются вообще.
« Последнее редактирование: 30.04.2009, 10:37:38 от bzzik » Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #12 : 30.04.2009, 11:09:18 »

Замени:

Код
if (isset($avatars[$userid]->avatar))
на
Код
if (isset($avatars[$userid]) && isset($avatars[$userid]->avatar))
Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #13 : 30.04.2009, 12:17:30 »

Всё равно. Я уже по разому пытался менять, но как только делаю логаут - аватарки пропадают. То есть получается, что они вообще не пытаются вывестись - в IE даже нету неверного вывода (ну таких квадратиков вместо предпологаемых картинок).
Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #14 : 03.05.2009, 20:39:42 »

Серж - что думаешь? Почему могуть прпадать аватарки, если ты не залогинен?
Записан
smart
Администратор
*******

Репутация: +1143/-14
Offline Offline

Пол: Мужской
Сообщений: 8204


тружусь даже во сне...


« Ответ #15 : 03.05.2009, 20:49:47 »

Серж - что думаешь? Почему могуть прпадать аватарки, если ты не залогинен?
ну по тому коду, что ты привел, по идее пропадать не должны... чуть попозже попробую поставить этот JomSocial и проверить...
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet