Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 7 Ответов
  • 3373 Просмотров
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Мысль неплохая, тем более, что компонент активно развивается. Скажу честно, я с каждым годом все ленивее. Ставить и проверять - во-первых лень, во-вторых нет времени, в-третьих, надо и пользователям какое-то удовольствие доставить.

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

1. Открываем /plugins/jcomments/jcomments.avatar.xml
2. Находим и заменяем:
Код: xml
<option value="idoblog">IDoBlog</option>
на
Код: xml
<option value="hekima">Hekima</option>
3. Открываем /plugins/jcomments/jcomments.avatar.php
4. Находим и заменяем:
Код: php
		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;
на
Код: php
		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, 02:28:16 от smart »
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
smart, большое вам спасибо за код
Немного изменила ваш код под текущую версию компонента

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

Код: 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, можно мне внести изменения в ваш плагин и выложить здесь на форуме и у меня на сайте, чтобы людям было удобнее ставить?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Мне кажется как-то уж очень сложно все получилось.

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

Код: php
$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.
« Последнее редактирование: 18.01.2011, 23:53:35 от smart »
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
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

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Сделано так только из-за совместимости со старыми модулями
ну совместимость сомнительная - любая непустая строка приводится к true, не уверен что это корректно...

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

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

Поэтому в вашем коде HekimaBlogHelperFront::isCBintegration() не выдаст ничего кроме false (тогда зачем он там вообще?).
Ну когда я вызывал этот метод, то я опирался на код версии 0.6.1.1 (правда я не очень понимаю, почему я скачал более старую версию), и там метод возвращал в любом случае значение:
Код: php
        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, 00:52:37 от smart »
*

sherza

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

Код: php
			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
- для старых версий оно действительно работало, пока я не оптимизировала количество запросов к базе
*

Krax

  • Осваиваюсь на форуме
  • 19
  • 0 / 0
Ребята спасибо вам за такое оперативное реагирование :). установлены HEKIMA! BLOG 0.6.4  и JComments 2.2.0.2.
все работает прекрасно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Поддержка akismet была бы кстати в JComments

Автор Александр Кардаш

Ответов: 16
Просмотров: 3163
Последний ответ 03.10.2022, 11:03:05
от wishlight
Поддержка аватаров из компонента EasySocial

Автор GidovVM

Ответов: 2
Просмотров: 1436
Последний ответ 20.02.2022, 21:19:38
от Helios
Поддержка аватаров из phpBB3

Автор Tokyo

Ответов: 7
Просмотров: 13689
Последний ответ 17.02.2018, 17:47:27
от Sabotage
Поддержка аваторов из компонента Extra Registration

Автор lev731

Ответов: 0
Просмотров: 2755
Последний ответ 06.04.2015, 14:44:28
от lev731
Jcomments для компонента личного кабинета BS Myjspace

Автор mozerov

Ответов: 3
Просмотров: 2468
Последний ответ 06.11.2013, 13:40:00
от smart