Возникла у меня как-то необходимость понаблюдать посещаемость своего сайта поисковыми роботами, и я решил чуть подработать модуль "Кто онлайн?".
Для этого потребовалось всего три движения.
1. Открываем файл /core/cms.php и находим в этом файле проверку на известных ботов:
//проверяем, есть ли текущий пользователь в таблице "кто онлайн" $sql = "SELECT id FROM cms_online WHERE (ip = '$ip' AND user_id ='$user_id' AND agent='$useragent')"; $result = $inDB->query($sql) ; if (!$inDB->num_rows($result)){ //Проверяем, пользователь это или поисковый бот $crawler = false; //Если не бот, вставляем запись в "кто онлайн" if (!$crawler){ $sql = "INSERT INTO cms_online (ip, sess_id, lastdate, user_id, agent, viewurl) VALUES ('$ip', '$sess_id', NOW(), '$user_id', '$useragent', '$page')"; $inDB->query($sql) ; }
и заменяем всю эту конструкцию на это:
//проверяем, есть ли текущий пользователь в таблице "кто онлайн" $sql = "SELECT id FROM cms_online WHERE (ip = '$ip' AND user_id ='$user_id' AND agent='$useragent')"; $result = $inDB->query($sql) ; if (!$inDB->num_rows($result)){ //Проверяем, пользователь это или поисковый бот //$crawler = false; //foreach($bots as $bot=>$uagent){ if (strpos($useragent, $uagent)) { $crawler = true; } } //Если не бот, вставляем запись в "кто онлайн" //if (!$crawler){ $sql = "INSERT INTO cms_online (ip, sess_id, lastdate, user_id, agent, viewurl) VALUES ('$ip', '$sess_id', NOW(), '$user_id', '$useragent', '$page')"; $inDB->query($sql) ; //}
Это мы убили проверку на известных инстанту ботов)))
2. Открываем файл модуля \modules\mod_whoonline\module.php и находим
echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$inDB->rows_count('cms_online', 'user_id = 0 OR user_id = \'\'').'</div>';
заменяем на
//----------------Поисковые роботы------------------------- $now = 0; if ($inDB->num_rows($result)){ while($usr = $inDB->fetch_assoc($result)){ {$bots[]='Google';} {$bots[]='Yandex';} {$bots[]=' Rambler';} {$bots[]='Aport';} {$bots[]='Yahoo';} {$bots[]='Mail.Ru';} {$bots[]='MSNbot';} {$bots[]='Ezooms';} {$bots[]='Bingbot';} {$bots[]='MJ12bot';} }} echo '<div style="margin-top:10px"><strong>Поисковые боты:</strong> '.$boty.'</div>'; } else { echo '<div style="margin-top:10px"><strong>Поисковых ботов нет</strong></div>'; } echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$guest.'</div>'; //-------------------конец поисковым ботам------------------
Количество поисковых роботов можно изменять по своему усмотрению, добавляя строки в условие определения ботов. Посмотреть как выглядит модуль после переделки можно здесь.
Ну а если мы еще хотим, чтобы в модуле выделялись те пользователи, которые подключены к сайту через онлайн-агент, разработанный для InstsntCMS GENER'ом, то вносим еще в этом же файле следующие изменения:
1. Находим:
$sql = "SELECT o.user_id as id, u.login, u.nickname, 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); if ($total){ $now = 0; while($usr = $inDB->fetch_assoc($result)){ 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 { echo '<div><strong>'.$_LANG['WHOONLINE_USERS'].':</strong> 0</div>'; }
и меняем на измененный с процедурой идентификации агента:
$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/ Вот как это все выглядит на скриншоте:

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