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

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Поддержка аватаров из компонента Hekima! Blog 0.6.4  (Прочитано 1332 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Krax
Захожу иногда
**

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

Сообщений: 22


« : 17.01.2011, 22:30:12 »

http://hekima.ru/index.php/ru/download-hekima-blog/cat_view/50-hekima-blog/61--hekima-

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

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

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


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


« Ответ #1 : 18.01.2011, 03:21:17 »

Мысль неплохая, тем более, что компонент активно развивается. Скажу честно, я с каждым годом все ленивее. Ставить и проверять - во-первых лень, во-вторых нет времени, в-третьих, надо и пользователям какое-то удовольствие доставить.

Посему предлагаю проверить следующий вариант:

1. Открываем /plugins/jcomments/jcomments.avatar.xml
2. Находим и заменяем:
Код
<option value="idoblog">IDoBlog</option>
на
Код
<option value="hekima">Hekima</option>
3. Открываем /plugins/jcomments/jcomments.avatar.php
4. Находим и заменяем:
Код
		case 'idoblog':
if (count($users)) {
$db->setQuery('SELECT iduser, avatar FROM #__idoblog_users WHERE iduser in ('.implode(',', $users).')');
$avatars = $db->loadObjectList('iduser');
}
 
for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = (int) $comments[$i]->userid;
 
// profile link
$comments[$i]->profileLink = $userid ? JRoute::_('index.php?option=com_idoblog&task=profile&userid='.$userid) : '';
 
// avatar
if (isset($avatars[$userid]) && $avatars[$userid]->avatar != '') {
$comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site').'/images/idoblog/'. $avatars[$userid]->avatar);
}
}
break;
на
Код
		case 'hekima':
if (count($users)) {
$db->setQuery('SELECT user_id, image as avatar FROM #__hekima_blog_myaccount WHERE user_id in ('.implode(',', $users).')');
$avatars = $db->loadObjectList('user_id');
}
 
include_once(JPATH_SITE.DS.'components'.DS.'com_hekima'.DS.'helpers'.DS.'hekimablog.php');
 
$imagesPath = HekimaBlogHelperFront::isCBintegration()? '/images/comprofiler/' : '/components/com_hekimablog/Images/blogger/th';
 
for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = (int) $comments[$i]->userid;
 
// profile link
$comments[$i]->profileLink = $userid ? JRoute::_('index.php?option=com_hekimablog&view=myposts&task=myaccount&user='.$userid) : '';
 
// avatar
if (isset($avatars[$userid]) && $avatars[$userid]->avatar != '') {
$comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site').$imagesPath.$avatars[$userid]->avatar);
}
}
break;

Мне кажется, что все должно работать.

« Последнее редактирование: 18.01.2011, 03:28:16 от smart » Записан
sherza
Разработчик расширений для Joomla 1.5
*

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

Пол: Женский
Сообщений: 136



« Ответ #2 : 18.01.2011, 22:35:34 »

smart, большое вам спасибо за код
Немного изменила ваш код под текущую версию компонента

В файле  /plugins/jcomments/jcomments.avatar.php стоит сделать следующую замену:

Код
		case 'hekima':
 
include_once(JPATH_SITE.DS.'components'.DS.'com_hekimablog'.DS.'helpers'.DS.'hekimablog.php');
$hkm_settings=JRequest::getVar( 'hkm_settings', array(), 'method');
if(empty($hkm_settings)){
   $db->setQuery("SELECT name, value FROM #__hekima_blog_settings");
   $result=$db->loadAssocList('name');
   JRequest::setVar( 'hkm_settings', $result);
}
$integration = HekimaBlogHelperFront::isCBintegration();
 
if($integration=='kunena'){
$user_query='SELECT userid, avatar FROM #__kunena_users WHERE userid in (' . implode(',', $users)  . ')';
 
$avatarA = $mainframe->getCfg('absolute_path'). DS . 'media' . DS . 'kunena' . DS . 'avatars' . DS ;
$avatarL = $mainframe->getCfg('live_site'). '/media/kunena/avatars/';
 
}else if($integration=='cb'){
 
$user_query='SELECT user_id as userid, avatar FROM #__comprofiler WHERE user_id in (' . implode(',', $users)  . ') AND avatarapproved = 1';
 
}else if($integration=='js'){
 
$user_query='SELECT userid, thumb as avatar FROM #__community_users WHERE userid in (' . implode(',', $users)  . ')';
}else{
$user_query='SELECT user_id as userid, image as avatar FROM #__hekima_blog_myaccount WHERE user_id in ('.implode(',', $users).')';
}
 
if (count($users)) {
$db->setQuery($user_query);
$avatars = $db->loadObjectList('userid');
unset($users);
} else {
$avatars = array();
}
 
for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = (int) $comments[$i]->userid;
 
// link to profile
$comments[$i]->profileLink = $userid ? JoomlaTuneRoute::_('index.php?option=com_hekimablog&view=myposts&task=myaccount&user=' . $userid) : '';
 
// avatar
       if (isset($avatars[$userid]) && $avatars[$userid]->avatar != '') {
        if (is_file($avatarA . $avatars[$userid]->avatar) && $integration=='kunena') {
 
   $comments[$i]->avatar = plgJCommentsAvatarImg($avatarL . $avatars[$userid]->avatar);
 
}else if(file_exists(JPATH_SITE . DS . $avatars[$userid]->avatar) && $integration=='js'){
 
   $comments[$i]->avatar = plgJCommentsAvatarImg(JURI::base(). $avatars[$userid]->avatar);
 
}else if (isset($avatars[$userid]) && !empty($avatars[$userid]->avatar) && $integration=='cb') {
 
   $tn = strpos($avatars[$userid]->avatar, 'gallery') === 0 ? '' : 'tn';
   $comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site'). '/images/comprofiler/'. $tn . $avatars[$userid]->avatar);
 
}else if(!$integration){
   $comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site'). '/components/com_hekimablog/Images/blogger/th'. $avatars[$userid]->avatar);
}
 
} else {
$comments[$i]->avatar = '';
}
}
unset($avatars);
break;
 
 
 

smart, можно мне внести изменения в ваш плагин и выложить здесь на форуме и у меня на сайте, чтобы людям было удобнее ставить?
« Последнее редактирование: 18.01.2011, 22:59:58 от sherza » Записан
smart
Администратор
*******

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

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


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


« Ответ #3 : 19.01.2011, 00:43:45 »

Мне кажется как-то уж очень сложно все получилось.

1. Если нужно показывать аватары из CommunityBuilder, Kunena или JomSocial, то в плагине нужно выбирать соотв. пункт, и не нужна эта куча проверок.
2. Зачем к примеру строка:

Код
$hkm_settings=JRequest::getVar( 'hkm_settings', array(), 'method');

Если плагин может быть вызван откуда угодно, например из модуля, опубликованного на странице контактов? Там никогда не будет переменной hkm_settings... Кроме того, учитывая тот факт, что плагин в цикле обходит весь список комментариев на странице, он должен быть максимально легковесным, а текущая реализация получается слишком громоздкой.

Я понимаю, с чем связано добавление всех этих проверок - хочется показывать аватары из интегрированного источника, а ссылки на профиль чтобы вели в блог. Мысль весьма неплохая, но ее надо реализовывать несколько иначе. Обещаю подумать над этим в ближайшее время. А пока, считаю свой вариант интеграции более оптимальным (по крайней мере на текущий момент).

Кстати, а почему метод HekimaBlogHelperFront::isCBintegration(), который по названию по идее должен возвращать boolean, теперь возвращает string? Не лучше ли оставить старую реализацию метода для совместимости, а новый уже называть getIntegrationType или что-то в этом роде?

smart, можно мне внести изменения в ваш плагин и выложить здесь на форуме и у меня на сайте, чтобы людям было удобнее ставить?
Крайне нежелательно, ибо в этом случае может возникнуть излишняя путаница. В принципе вы можете сделать отдельный плагин, на основе текущего, убрав из него все, что касается других компонентов, который будет целиком "заточен" под Hekima Blog, он будет и легче... Назовите его, к примеру JComments - HekimaAvatar... Сам по себе JComments - Avatar выпущен под GPL, так что взять его за основу, убрать все лишнее (чтобы не пришлось поддерживать то, с чем не сталкиваетесь) и дать новое название - это все разрешается лицензией. Разве что в копирайтах укажите, что сделан на базе JComments - Avatar и оставите строчку про копирайт на оригинальный плагин.

Мне кажется это будет правильнее, тем более вы блогом занимаетесь, вы его развиваете, так что взять на поддержку еще мелкий плагин думаю проблем не будет. А я, со своей стороны, готов его выложить на JoomlaTune, рядом с остальными плагинами для JComments.
« Последнее редактирование: 19.01.2011, 00:53:35 от smart » Записан
sherza
Разработчик расширений для Joomla 1.5
*

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

Пол: Женский
Сообщений: 136



« Ответ #4 : 19.01.2011, 01:10:57 »

smart, я с вами согласна, хочу пояснить по некоторым пунктам

Цитировать
Если нужно показывать аватары из CommunityBuilder, Kunena или JomSocial, то в плагине нужно выбирать соотв. пункт, и не нужна эта куча проверок.
-верно, но многие пользователи не задумываются, что в самом hekima блоге у них интеграция с аватарами форума кунены или JomSocial. Поэтому в данном случае я подцепляю аватары из интеграций. Ваш вариант, конечно же, более оптимальный, но... в нем нет возможности показывать аватары из интегрированного источника. Можно оставлять это на совести пользователя, я понимаю. Я подумаю, как сделать плагин легковесным и при этом не ограничить функционал.

Цитировать
Кстати, а почему метод HekimaBlogHelperFront::isCBintegration(), который по названию по идее должен возвращать boolean, теперь возвращает string?
- все верно, в ранних версиях этот метод возвращал boolean, когда была интеграция только с CB. Теперь, поскольку существует несколько интеграций, эта функция возвращает string во всех случаях интеграций и boolean (false) в случае отсутствия интеграций. Сделано так только из-за совместимости со старыми модулями. Со следующий версии блога метод будет заменен на getIntegration()


Цитировать
$hkm_settings=JRequest::getVar( 'hkm_settings', array(), 'method');
Если плагин может быть вызван откуда угодно, например из модуля, опубликованного на странице контактов? Там никогда не будет переменной hkm_settings...
Абсолютно верное замечание. Впрямую HekimaBlogHelperFront::isCBintegration() можно вызывать только из блога. Поэтому я сначала ставлю проверку, есть ли переменная $hkm_settings (if(empty($hkm_settings))), если нет, то получаю ее значение из базы. Переменная должна быть определена, чтобы пользоваться функцией HekimaBlogHelperFront::isCBintegration().  Думаю, вам покажется ход мысли неправильным, хотя могу объяснить, почему я так сделала: В компоненте блога я делаю выборку из базы settings только в начальный момент. Затем settings заносятся в переменную и используются в различных функциях. Этим я смогла ощутимо уменьшить количество запросов к базе данных. Поэтому в вашем коде HekimaBlogHelperFront::isCBintegration() не выдаст ничего кроме false (тогда зачем он там вообще?).  В следующей версии блога для поддержки работы функции getIntegration из сторонних расширений я внесу проверку на существование переменной $hkm_settings и при необходимости буду извлекать из базы настройку. Да, в этом признаю, я не продумала: не рассчитывала на использовние из сторонних расширений. Сделаю. Так же думаю сделать уже собственную встроенную функцию getAvatar, возвращающую аватар и ссылку на профиль

Цитировать
smart, можно мне внести изменения в ваш плагин и выложить здесь на форуме и у меня на сайте, чтобы людям было удобнее ставить?
Крайне нежелательно, ибо в этом случае может возникнуть излишняя путаница.
Приношу свои извинения. Хотела сделать удобнее людям

Еще раз спасибо за проявленное внимание к компоненту
Записан
smart
Администратор
*******

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

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


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


« Ответ #5 : 19.01.2011, 01:35:32 »

Сделано так только из-за совместимости со старыми модулями
ну совместимость сомнительная - любая непустая строка приводится к true, не уверен что это корректно...

Так же думаю сделать уже собственную встроенную функцию getAvatar, возвращающую аватар и ссылку на профиль
Думаю это в любом случае будет полезно, но, учитывая тот факт, что данный метод будет содержать перечисленные ниже проверки, он будет несколько тяжеловат, для многократного вызова в цикле. Кроме того, лучше разделить методы возвращающие ссылку на аватар, и ссылку на профиль, ибо они могут использоваться раздельно.

Приношу свои извинения. Хотела сделать удобнее людям
Извиняться тут совершенно не за что, просто если появятся модификации, поддержка усложнится, а я бы этого не хотел. Как я уже писал ниже (я дописывал потом, может быть вы пропустили), можно сделать отдельный плагин аватаров для поддержки непосредственно компонента HekimaBlog.

Поэтому в вашем коде HekimaBlogHelperFront::isCBintegration() не выдаст ничего кроме false (тогда зачем он там вообще?).
Ну когда я вызывал этот метод, то я опирался на код версии 0.6.1.1 (правда я не очень понимаю, почему я скачал более старую версию), и там метод возвращал в любом случае значение:
Код
        function isCBintegration(){
         $cb=JPATH_BASE.'/components/com_comprofiler/comprofiler.php';
         if(!file_exists($cb)) return false;
         $database = JFactory::getDBO();
         $database->setQuery("SELECT value FROM #__hekima_blog_settings WHERE name='communitybuilder'");
         return $database->loadResult();
       }
В противном бы случае, я его не вызывал бы...
« Последнее редактирование: 19.01.2011, 01:52:37 от smart » Записан
sherza
Разработчик расширений для Joomla 1.5
*

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

Пол: Женский
Сообщений: 136



« Ответ #6 : 19.01.2011, 01:55:49 »

В общем, smart, я поняла. Надо думать над максимальной оптимизацией и при этом ничего не потерять в фукнционале. Абсолютно соглашаюсь. Если поделитесь советом относительно вашего модуля - буду очень признательна. Буду думать
На данный момент как итог для пользователей

Код
			case 'hekima':
if (count($users)) {
$db->setQuery('SELECT user_id, image as avatar FROM #__hekima_blog_myaccount WHERE user_id in ('.implode(',', $users).')');
$avatars = $db->loadObjectList('user_id');
}
 
$imagesPath = '/components/com_hekimablog/Images/blogger/th';
 
for ($i=0,$n=count($comments); $i < $n; $i++) {
$userid = (int) $comments[$i]->userid;
 
// profile link
$comments[$i]->profileLink = $userid ? JRoute::_('index.php?option=com_hekimablog&view=myposts&task=myaccount&user='.$userid) : '';
 
// avatar
if (isset($avatars[$userid]) && $avatars[$userid]->avatar != '') {
$comments[$i]->avatar = plgJCommentsAvatarImg($mainframe->getCfg('live_site').$imagesPath.$avatars[$userid]->avatar);
}
}
break;

smart, я убрала несколько строчек в вашем коде, поскольку они без проверки переменной теряют смысл.
На данном этапе в данном коде поддерживаются только "родные" аватары hekima блога, без интеграций. Если нужны интеграции аватаров kunena, cb или JomSocial, выбирайте эти приложения непосредственно в меню плагина аавтаров

Цитировать
Ну когда я вызывал этот метод, то я опирался на код версии 0.6.1.1
- для старых версий оно действительно работало, пока я не оптимизировала количество запросов к базе
« Последнее редактирование: 19.01.2011, 01:59:22 от sherza » Записан
Krax
Захожу иногда
**

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

Сообщений: 22


« Ответ #7 : 19.01.2011, 20:54:11 »

Ребята спасибо вам за такое оперативное реагирование Azn. установлены HEKIMA! BLOG 0.6.4  и JComments 2.2.0.2.
все работает прекрасно!
Записан
Страниц: [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