Модернезируем модуль "Кто в онлайн?"

Опубликовано:
Редактировалось: 20 раз — последний 15 августа 2018
Просмотров: 5583
+7
Голосов: 7

Возникла у меня как-то необходимость понаблюдать посещаемость своего сайта поисковыми роботами, и я решил чуть подработать модуль "Кто онлайн?".

Для этого потребовалось всего три движения.

1. Открываем файл /core/cms.php и находим в этом файле проверку на известных ботов:

Код PHP:
  1.  
  2. //проверяем, есть ли текущий пользователь в таблице "кто онлайн"
  3. $sql = "SELECT id FROM cms_online WHERE (ip = '$ip' AND user_id ='$user_id' AND agent='$useragent')";
  4. $result = $inDB->query($sql) ;
  5.  
  6. if (!$inDB->num_rows($result)){
  7. //Проверяем, пользователь это или поисковый бот
  8. $crawler = false;
  9. foreach($bots as $bot=>$uagent){ if (strpos($useragent, $uagent)) { $crawler = true; } }
  10. //Если не бот, вставляем запись в "кто онлайн"
  11. if (!$crawler){
  12. $sql = "INSERT INTO cms_online (ip, sess_id, lastdate, user_id, agent, viewurl) VALUES ('$ip', '$sess_id', NOW(), '$user_id', '$useragent', '$page')";
  13. $inDB->query($sql) ;
  14. }
  15.  

и заменяем всю эту конструкцию на это:

Код PHP:
  1.  
  2. //проверяем, есть ли текущий пользователь в таблице "кто онлайн"
  3. $sql = "SELECT id FROM cms_online WHERE (ip = '$ip' AND user_id ='$user_id' AND agent='$useragent')";
  4. $result = $inDB->query($sql) ;
  5.  
  6. if (!$inDB->num_rows($result)){
  7. //Проверяем, пользователь это или поисковый бот
  8. //$crawler = false;
  9. //foreach($bots as $bot=>$uagent){ if (strpos($useragent, $uagent)) { $crawler = true; } }
  10. //Если не бот, вставляем запись в "кто онлайн"
  11. //if (!$crawler){
  12. $sql = "INSERT INTO cms_online (ip, sess_id, lastdate, user_id, agent, viewurl) VALUES ('$ip', '$sess_id', NOW(), '$user_id', '$useragent', '$page')";
  13. $inDB->query($sql) ;
  14. //}
  15.  

Это мы убили проверку на известных инстанту ботов)))

2. Открываем файл модуля \modules\mod_whoonline\module.php и находим

Код PHP:
  1.  
  2. echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$inDB->rows_count('cms_online', 'user_id = 0 OR user_id = \'\'').'</div>';
  3.  

заменяем на

Код PHP:
  1.  
  2. //----------------Поисковые роботы-------------------------
  3. $bots=array();
  4. $result = mysql_query("SELECT user_id,agent FROM cms_online WHERE user_id = 0");
  5. $now = 0;
  6. if ($inDB->num_rows($result)){
  7. while($usr = $inDB->fetch_assoc($result)){
  8. if ( strstr( $usr['agent'], 'Googlebot' ) )
  9. {$bots[]='Google';}
  10. if ( strstr( $usr['agent'], 'Yandex' ) )
  11. {$bots[]='Yandex';}
  12. if ( strstr( $usr['agent'], 'StackRambler' ) )
  13. {$bots[]=' Rambler';}
  14. if ( strstr( $usr['agent'], 'Aport' ) )
  15. {$bots[]='Aport';}
  16. if ( strstr( $usr['agent'], 'Yahoo' ) )
  17. {$bots[]='Yahoo';}
  18. if ( strstr( $usr['agent'], 'Mail.Ru' ) )
  19. {$bots[]='Mail.Ru';}
  20. if ( strstr( $usr['agent'], 'msnbot' ) )
  21. {$bots[]='MSNbot';}
  22. if ( strstr( $usr['agent'], 'Ezooms' ) )
  23. {$bots[]='Ezooms';}
  24. if ( strstr( $usr['agent'], 'bingbot' ) )
  25. {$bots[]='Bingbot';}
  26. if ( strstr( $usr['agent'], 'MJ12bot' ) )
  27. {$bots[]='MJ12bot';}
  28. }}
  29. if (sizeof($bots)){
  30. $bots1=array_unique ($bots);
  31. $boty = implode(", ",$bots1);
  32. echo '<div style="margin-top:10px"><strong>Поисковые боты:</strong>
  33. '.$boty.'</div>';
  34. }
  35. else {
  36. echo '<div style="margin-top:10px"><strong>Поисковых ботов нет</strong></div>';
  37. }
  38. $guest=$inDB->rows_count('cms_online', 'user_id = 0 OR user_id = \'\'')-sizeof($bots);
  39. echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$guest.'</div>';
  40. //-------------------конец поисковым ботам------------------
  41.  

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

Ну а если мы еще хотим, чтобы в модуле выделялись те пользователи, которые подключены к сайту через онлайн-агент, разработанный для InstsntCMS GENER'ом, то вносим еще в этом же файле следующие изменения:

1. Находим:

Код PHP:
  1.  
  2. $sql = "SELECT
  3. o.user_id as id,
  4. u.login,
  5. u.nickname,
  6. p.gender as gender
  7. FROM cms_online o
  8. LEFT JOIN cms_users u ON u.id = o.user_id
  9. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  10. WHERE u.is_locked = 0 AND u.is_deleted = 0
  11. GROUP BY o.user_id";
  12.  
  13. $result = $inDB->query($sql) ;
  14. $total = $inDB->num_rows($result);
  15.  
  16. if ($total){
  17. $now = 0;
  18. while($usr = $inDB->fetch_assoc($result)){
  19. if($cfg['admin_editor']){
  20. if ($inCore->userIsAdmin($usr['id'])){
  21. echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_admin']}");
  22. } elseif ($inCore->userIsEditor($usr['id'])) {
  23. echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_editor']}");
  24. } else {
  25. echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);
  26. }
  27. } else {
  28. echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);
  29. }
  30. if ($now < $total-1) { echo ', '; }
  31. $now ++;
  32. }
  33. } else { echo '<div><strong>'.$_LANG['WHOONLINE_USERS'].':</strong> 0</div>'; }
  34.  

и меняем на измененный с процедурой идентификации агента:

$sql = "SELECT

o.user_id as id,

u.login,

u.nickname,

agent,

viewurl,

p.gender as gender

FROM cms_online o

LEFT JOIN cms_users u ON u.id = o.user_id

LEFT JOIN cms_user_profiles p ON p.user_id = u.id

WHERE u.is_locked = 0 AND u.is_deleted = 0

GROUP BY o.user_id";

$result = $inDB->query($sql) ;

$total = $inDB->num_rows($result);

echo '<div style="font-family: Tahoma; font-size: 11px;">';

if ($total){

$now = 0;

while($usr = $inDB->fetch_assoc($result)){

if(!strstr( $usr['viewurl'], '/im.php' )){

if($cfg['admin_editor']){

if ($inCore->userIsAdmin($usr['id'])){

echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_admin']}");

} elseif ($inCore->userIsEditor($usr['id'])) {

echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_editor']}");

} else {

echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);

}

} else {

echo cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);

}

if ($now < $total-1) { echo ', '; }

$now ++;

} else {

if($cfg['admin_editor']){

if ($inCore->userIsAdmin($usr['id'])){

echo '<a style="padding:1px; height:16px; line-height:16px; background:url(/components/users/images/agent.png) no-repeat left center; padding-left:18px; "></a>'.cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_admin']}");

} elseif ($inCore->userIsEditor($usr['id'])) {

echo '<a style="padding:1px; height:16px; line-height:16px; background:url(/components/users/images/agent.png) no-repeat left center; padding-left:18px; "></a>'.cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login'], "color:{$cfg['color_editor']}");

} else {

echo '<a style="padding:1px; height:16px; line-height:16px; background:url(/components/users/images/agent.png) no-repeat left center; padding-left:18px; "></a>'.cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);

}

} else {

echo '<a style="padding:1px; height:16px; line-height:16px; background:url(/components/users/images/agent.png) no-repeat left center; padding-left:18px; "></a>'.cmsUser::getGenderLink($usr['id'], $usr['nickname'], null, $usr['gender'], $usr['login']);

}

if ($now < $total-1) { echo ', '; }

$now ++;

}

}

} else { echo '<div><strong>'.$_LANG['WHOONLINE_USERS'].':</strong> 0</div>'; }

Вот и все! И перед пользователем, подключенным через онлайн-агент будет отображаться значок agent.png, который вы предварительно загрузите по адресу /components/users/images/ Вот как это все выглядит на скриншоте:

Кому лень ковыряться может скачать сам модуль со значком

здесь.

Не забудьте значок перекинуть по вышеуказанному адресу! Или перепишите в модуле кго местонахождение.

Комментарии (11)
Alexandr #
: 0
Извените пожалуйста, а где можно взять агент(подскажите пожалуйста если не затруднит) или написать в личку аска 9632327 или spy_89_07@mail.ru буду очень презнателен.
Letsgo #
: 0
Агент на официальном сайте InstantCMS >>> Тут Офф сайт
Alexandr #
: 0
Мне очень понравилось как Вы сделали)) особенно с ботами и онлайн агентом))) Респект!
seyfer #
: 0
У меня что-то куча гостей 90, а ботов не определяет..
seyfer #
: 0
исправил, заработало
Fatman #
: 0
Ну и отлично, а то я уже собрался инструкцию по отладке набирать)))))
Letsgo #
: 0
А вот кого я давно не видел)
Fatman #
: 0
Высоко сижу, далеко гляжу))))... Я каждый день захожу, Саш. Просматриваю новости и разности. И по зову в любой момент могу объявиться под своим логином!
Letsgo #
: 0
Понятно) настояший пограничник, всегда все видит под контролем)
Fatman #
: 0
Вот это точно! Погранцы по сути своей всегда защищают. И никогда не нападают)))))))
Flora #
: 0
А может кто подскажет, как сделать так, чтобы рядом с никами зарегенных посетителей сайта показывались бы уменьшенные копии их аватарок, а не стандартные фигурки МЭ и ЖО?)

Голосуем

Самый нужный компонент