inst1.10.4 вывод онлайн друзей в профиле

Помогите пожалуйста разобраться, как сделать так, чтобы под общим списком друзей выводился список друзей которые онлайн?

#1 14 июня 2015 в 15:37
Помогите пожалуйста разобраться, как сделать так, чтобы под общим списком друзей выводился список друзей которые онлайн?
Я находил на форуме темы схожей тематики но для instantcms 1.10.4 они к сожалению не подходят, подскажите пожалуйста можно ли как-то вывести друзей онлайн Вот как на картинке в профиле под основным списком друзей.

Заранее спасибо за помощь.
#2 15 июня 2015 в 16:51
Приветствую. Как вариант, прописать в конфиге модели (/components/users/model.php) 'on_line'=>0, а в шаблоне профиля добавить ещё один блок с друзьями, но обернуть в условие
  1. {foreach key=tid item=friend from=$usr.friends}
  2. {if $cfg.on_line = $friend.is_online}
  3. ............................................
  4. {/if}
  5. {/foreach}
  6.  
P.S.У меня 1.10.6, но думаю и в четвёртой будет работать.
#3 15 июня 2015 в 18:35
Здравствуйте. Спасибо большое за подсказку, но что-то не выходит, прописал в конфигах, пытался по разному обернуть не получается выдает белую страницу. Вот привожу кусок кода который пытался обернуть.
  1. {if $usr.friends}
  2. <div class="usr_friends_block usr_profile_block">
  3. {if $usr.friends_total > 6}
  4. <div class="float_bar">
  5. <a href="/users/{$usr.id}/friendlist.html">{$LANG.ALL_FRIENDS}</a> ({$usr.friends_total})
  6. </div>
  7. {/if}
  8. <div class="usr_wall_header">
  9. {if !$myprofile}
  10. {$LANG.USER_FRIENDS}
  11. {else}
  12. {$LANG.MY_FRIENDS}
  13. {/if}
  14. </div>
  15. {assign var="col" value="1"}
  16. <table width="" cellpadding="5" cellspacing="0" border="0" class="usr_friends_list" align="left">
  17. {foreach key=tid item=friend from=$usr.friends}
  18. {if $col==1}<tr>{/if}
  19. <td align="center" valign="top">
  20. <div class="usr_friend_cell">
  21. <div align="center"><a class="friend_link" href="{profile_url login=$friend.login}">{$friend.nickname}</a></div>
  22. <div align="center"><a href="{profile_url login=$friend.login}"><img border="0" class="usr_img_small" src="{$friend.avatar}" /></a></div>
  23. <div align="center">{$friend.flogdate}</div>
  24. </div>
  25. </td>
  26.  
  27. {if $col==6} </tr> {assign var="col" value="1"} {else} {math equation="x + 1" x=$col assign="col"} {/if}
  28. {/foreach}
  29. {if $col>1}<td colspan="{math equation="x - 6 + 1" x=$col}">&nbsp;</td></tr>{/if}
  30. </table>
  31. </div>
  32. {/if}
{if $usr.friends} вот это пытался заменить на то что вы скинули.

И после того как добавил конфиг, но при этом не добавил в профиль файл обертку то тоже самое белая страница, и отдельно без конфига если оборачиваешь то тоже белая страница, и если все вместе делаешь то тоже белая страница.
#4 15 июня 2015 в 18:37
А в конфигах добавлял сюда:
  1. public static function getDefaultConfig() {
  2.  
  3. $cfg = array(
  4. 'sw_comm'=>1,
  5. 'sw_search'=>1,
  6. 'sw_forum'=>1,
  7. 'sw_photo'=>1,
  8. 'sw_wall'=>1,
  9. 'sw_blogs'=>1,
  10. 'sw_clubs'=>1,
  11. 'sw_feed'=>1,
  12. 'sw_awards'=>1,
  13. 'sw_board'=>1,
  14. 'sw_msg'=>1,
  15. 'sw_guest'=>1,
  16. 'sw_gifts'=>1,
  17. 'karmatime'=>1,
  18. 'karmaint'=>'DAY',
  19. 'photosize'=>0,
  20. 'watermark'=>1,
  21. 'smallw'=>64,
  22. 'medw'=>200,
  23. 'medh'=>500,
  24. 'sw_files'=>1,
  25. 'filessize'=>100,
  26. 'users_perpage'=>10,
  27. 'wall_perpage'=>10,
  28. 'filestype'=>'jpeg,gif,png,jpg,bmp,zip,rar,tar',
  29. 'privforms'=>array(),
  30. 'deltime'=>6
  31. );
  32.  
  33. return $cfg;
  34.  
  35. }
  36.  
#6 15 июня 2015 в 20:01
web4ik, Смотрите внимательно, что я вам написал в посте№2. Условие следует ставить после цикла foreach. И если не выйдет покажите вашу ф-цию getFriends() класса cmsUser (/core/classes/user.class.php)
#7 16 июня 2015 в 19:01
Вот где я добавил строки которые Вы привели в своем коде:
  1. {if $usr.friends}
  2. <div class="usr_friends_block usr_profile_block">
  3. {if $usr.friends_total > 6}
  4. <div class="float_bar">
  5. <a href="/users/{$usr.id}/friendlist.html">{$LANG.ALL_FRIENDS}</a> ({$usr.friends_total})
  6. </div>
  7. {/if}
  8. <div class="usr_wall_header">
  9. {if !$myprofile}
  10. {$LANG.USER_FRIENDS}
  11. {else}
  12. {$LANG.MY_FRIENDS}
  13. {/if}
  14. </div>
  15. {assign var="col" value="1"}
  16. <table width="" cellpadding="5" cellspacing="0" border="0" class="usr_friends_list" align="left">
  17. {foreach key=tid item=friend from=$usr.friends}
  18. {if $cfg.on_line = $friend.is_online}
  19. {if $col==1}<tr>{/if}
  20. <td align="center" valign="top">
  21. <div class="usr_friend_cell">
  22. <div align="center"><a class="friend_link" href="{profile_url login=$friend.login}">{$friend.nickname}</a></div>
  23. <div align="center"><a href="{profile_url login=$friend.login}"><img border="0" class="usr_img_small" src="{$friend.avatar}" /></a></div>
  24. <div align="center">{$friend.flogdate}</div>
  25. </div>
  26. </td>
  27.  
  28. {if $col==6} </tr> {assign var="col" value="1"} {else} {math equation="x + 1" x=$col assign="col"} {/if}
  29. {/if}
  30. {/foreach}
  31. {if $col>1}<td colspan="{math equation="x - 6 + 1" x=$col}">&nbsp;</td></tr>{/if}
  32. </table>
  33. </div>
  34. {/if}

Так же прописал в конфиге модели (/components/users/model.php) 'on_line'=>0,
В прошлый раз просто запятую указать по невнимательности забыл. Теперь только когда выше приведенный код редактируется где надо вставить{if $cfg.on_line = $friend.is_online}{/if} то после вставки выводит белую страницу.


Вот ф-ция getFriends() класса cmsUser (/core/classes/user.class.php)
  1. // ============================================================================ //
  2.  
  3. /**
  4.   * Возвращает список друзей пользователя
  5. * и помещает в текущую сессию
  6.   * @param int $user_id
  7.   * @return array
  8.   */
  9. public static function getFriends($user_id=0){
  10.  
  11. if(!$user_id) { return array(); }
  12.  
  13. $friends = array();
  14.  
  15. // уже полученных друзей отдаем сразу
  16. if(isset(self::getInstance()->friends[$user_id])){
  17. return self::getInstance()->friends[$user_id];
  18. }
  19.  
  20. $is_me = (@$_SESSION['user']['id'] == $user_id);
  21.  
  22. //Если список уже в сессии, возвращаем
  23. if ($is_me && self::sessionGet('friends') !== false) {
  24.  
  25. foreach (self::sessionGet('friends') as $key=>$friend) {
  26. $friend['flogdate'] = self::getOnlineStatus($friend['id'], $friend['logdate']);
  27. $friends[$key] = $friend;
  28. }
  29. return $friends;
  30.  
  31. }
  32.  
  33. //иначе получаем список из базы, кладем в сессию и возвращаем
  34. $inDB = cmsDatabase::getInstance();
  35.  
  36. $sql = "SELECT
  37. CASE
  38. WHEN f.from_id = $user_id
  39. THEN f.to_id
  40. WHEN f.to_id = $user_id
  41. THEN f.from_id
  42. END AS id, u.nickname as nickname, u.login as login, u.is_deleted, u.status, u.logdate, p.imageurl
  43. FROM cms_user_friends f
  44. LEFT JOIN cms_users u ON u.id = CASE WHEN f.from_id = $user_id THEN f.to_id WHEN f.to_id = $user_id THEN f.from_id END
  45. INNER JOIN cms_user_profiles p ON p.user_id = u.id
  46. WHERE (from_id = $user_id OR to_id = $user_id) AND is_accepted =1 ORDER BY u.logdate DESC";
  47.  
  48. $result = $inDB->query($sql);
  49.  
  50. if ($inDB->num_rows($result)){
  51. while($friend = $inDB->fetch_assoc($result)){
  52. $friend['avatar'] = self::getUserAvatarUrl($friend['id'], 'small', $friend['imageurl'], $friend['is_deleted']);
  53. $friend['is_online'] = self::isOnline($friend['id']);
  54. $friend['flogdate'] = self::getOnlineStatus($friend['id'], $friend['logdate']);
  55. $friends[$friend['id']] = $friend;
  56. }
  57. }
  58.  
  59. // своих друзей кладем в сессию
  60. if ($is_me) { self::sessionPut('friends', $friends); }
  61.  
  62. // Запоминаем список друзей пользователя
  63. self::getInstance()->friends[$user_id] = $friends;
  64.  
  65. return $friends;
  66.  
  67. }
  68.  
  69. // ============================================================================ //
#8 16 июня 2015 в 19:11
Lora, собственно так ничего и не получилось если потребуется файл какой, могу целиком его скинуть.
Но белый экран после добавления if стабильно.
#9 16 июня 2015 в 19:18
Не знаю, у меня работает.

Вывод ошибок пробовали прописать в frontend.php?
  1. <?php
  2. ini_set('display_errors',1);
P.S.И давайте прятать под сполер файлы smile
Также включите режим отладки в админке.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.