Доработка модуля "Кто онлайн?" для отображения поисковых роботов

Автор: Юрий
Опубликовано: 440 дней назад (9 марта 2011)
Редактировалось: 13 раз — последний 20 мая 2011
+41
Голосов: 47
Возникла у меня как-то необходимость понаблюдать посещаемость своего сайта поисковыми роботами, и я решил чуть подработать модуль "Кто онлайн?".
Для этого потребовалось всего три движения.
1. Открываем файл /core/cms.php и находим
Код PHP:
        //собираем информацию о текущем пользователе
        $sess_id    = session_id();
        $ip         = $this->strClear($_SERVER['REMOTE_ADDR']);
после вставляем:
Код PHP:
        $useragent  = $this->strClear($_SERVER['HTTP_USER_AGENT']);
Не знаю почему, но у меня запись агента в базу в этом файле отсутствовала.

2. Далее находим в этом же файле проверку на известных ботов:
Код PHP:
        //проверяем, есть ли текущий пользователь в таблице "кто онлайн"
        $sql = "SELECT id FROM cms_online WHERE (sess_id = '$sess_id' AND ip = '$ip')";
        $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, viewurl) VALUES ('$ip', '$sess_id', NOW(), '$user_id', '$page')";
                $inDB->query($sql) ;
            }
заменим на это:
Код 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;
            //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) ;
            //}
Это мы убили проверку на известных инстанту ботов)))

3. Открываем файл модуля \modules\mod_whoonline\module.php и находим
Код PHP:
       echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$inDB->rows_count('cms_online', 'user_id = 0 OR user_id = \'\'').'</div>';
заменяем на
Код PHP:
//----------------Поисковые роботы-------------------------
$bots=array();
$result = mysql_query("SELECT user_id,agent FROM cms_online WHERE user_id = 0");
$now    = 0;
if ($inDB->num_rows($result)){
while($usr = $inDB->fetch_assoc($result)){	
	if ( strstr( $usr['agent'], 'Googlebot' ) )
	    {$bots[]='Google';}
	if ( strstr( $usr['agent'], 'Yandex' ) )
 		{$bots[]='Yandex';}
	if ( strstr( $usr['agent'], 'StackRambler' ) )
 		{$bots[]=' Rambler';}
	if ( strstr( $usr['agent'], 'Aport' ) )
 		{$bots[]='Aport';}
	if ( strstr( $usr['agent'], 'Yahoo' ) )
 		{$bots[]='Yahoo';}
	if ( strstr( $usr['agent'], 'Mail.Ru' ) ) 
 		{$bots[]='Mail.Ru';}
	if ( strstr( $usr['agent'], 'msnbot' ) )
 		{$bots[]='MSNbot';}
	if ( strstr( $usr['agent'], 'Ezooms' ) )
 		{$bots[]='Ezooms';}
	if ( strstr( $usr['agent'], 'bingbot' ) )
 		{$bots[]='Bingbot';}
	if ( strstr( $usr['agent'], 'MJ12bot' ) )
 		{$bots[]='MJ12bot';}		
	}}
	if (sizeof($bots)){
		$bots1=array_unique ($bots);
		$boty = implode(", ",$bots1);
		echo '<div style="margin-top:10px"><strong>Поисковые боты:</strong>
'.$boty.'</div>';
		}
	else {
		echo '<div style="margin-top:10px"><strong>Поисковых ботов нет</strong></div>';
		}
	$guest=$inDB->rows_count('cms_online', 'user_id = 0 OR user_id = \'\'')-sizeof($bots);	
    echo '<div style="margin-top:10px"><strong>'.$_LANG['WHOONLINE_GUESTS'].':</strong> '.$guest.'</div>';
//-------------------конец поисковым ботам------------------
Количество поисковых роботов можно изменять по своему усмотрению, добавляя строки в условие определения ботов. Посмотреть как выглядит модуль после переделки можно здесь. Может быть вы там даже ботов застанете smile В перспективе хочу сделать раздельное отображение пользователей находящихся непосредственно на сайте и через онлайн-агент ICM. Больших сложностей не вижу...
Модуль "Случайная фраза"
alpik # 9 марта 2011 в 22:59 +1
спасибо беру на тест!
Ruslan # 10 марта 2011 в 00:01 +1
Спасибо большое! Все работает. Только в файле /core/cms.php строка
Код PHP:
$useragent  = $this->strClear($_SERVER['HTTP_USER_AGENT']);
уже есть.
0 # 10 марта 2011 в 01:24 +2
Спасибо, забрал )))
WALTERZ # 10 марта 2011 в 05:26 +2
Отлично, спасибо!
Юрий # 10 марта 2011 в 06:11 +5
Внимание! Я обновил пост. Чтоб отображались наиболее популярные поисковые роботы потребовалось в файле /core/cms.php отключить их проверку.
Юрий # 10 марта 2011 в 06:56 +4
Были недочеты - устранил. Всем, кто взял доработку ранее - обновите!
Yuri # 10 марта 2011 в 09:02 +2
спасибо,нужная штука!
RocketeeR # 10 марта 2011 в 09:45 +2
Спасибо. Вот чего для полноты ощущений не хватало!
Ruslan # 10 марта 2011 в 12:24 +3
Если бы сделать чтоб подсказка всплывающая была при наведении на бота
Barrio design # 10 марта 2011 в 14:58 +2
ага, и уже посетивших отметить
sepraga # 10 марта 2011 в 13:34 +2
Спасибо. Вещь нужная.
0 # 10 марта 2011 в 13:45 +1
Спасибо)  +
Юрий # 11 марта 2011 в 19:42 +3
Заметил, что Googlebot в модуле плодится как кролик. Причина в том, что на сайт агент приходит во множественном числе с разными IP-адресами. Директива работы с повторами в массиве ботов была неверно мною написана. ИСПРАВИЛ!
googlebot # 11 марта 2011 в 21:11 +1
У меня всего 2 гуглеботика пока smile
Юрий # 11 марта 2011 в 21:13 +3
Ко мне было по 6-7 штук сразу захаживало.)))
0 # 12 марта 2011 в 12:24 +1
интересный казус..сделал как все  написано..пропали все колонки кроме той, в которой модуль кто онлайн находится..пришлось его отключить пока. Если подскажете в чем  дело, буду благодарен.
Юрий # 12 марта 2011 в 13:30 +3
Возможно, вы где-то ошиблись. Можете взять готовый модуль здесь: архив.
Кстати, он проверялся на версии 1.7. Для других я не уверен, будет ли работать (не пробовал).
Юрий # 12 марта 2011 в 13:34 +5
P.S. Интересно все-таки, какая же св.чь минусует? Я что, кому-нибудь в карман залез или непотребность какую-то опубликовал? Главное, без объяснения причин надо обязательно накакать. Смелые мужчины... Из-за таких и не хочется делиться наработками.
0 # 12 марта 2011 в 15:29 +1
Юрий..огромное спасибо..я  где то ошибся значит)) что и предполагал...очень здорово выглядит изменение!!! Выкладывайте наработки, а кто ставит минус, ждет реакции, не  обращайте внимание, разве  это существеннно.
bigR # 12 марта 2011 в 19:25 +1
Спасибо! Посмотрел на вашем сайте, Застал в онлайн Яндекс )))
CozaNostra # 15 марта 2011 в 11:11 0
Хорошая работа)
0 # 14 мая 2011 в 22:08 0
ошибку дает в 1.8
Юрий # 20 мая 2011 в 08:45 0
В коде, который нужно было вставить в module.php в ремарке //----------------Поисковые роботы------------------------- куда-то делся первый слэш. Поправил и проверил у себя. Все работает на 1.8
0 # 20 мая 2011 в 17:33 0
Спасибо Юра!
Юрий # 20 мая 2011 в 18:02 0
На досуге переработал этот модуль еще раз.))))
Теперь он, кроме показа поисковых ботов, еще и различает кто сидит на сайте в онлайне, а кто через онлайн-агента, разработанного уважаемым GENERом. Если пользователь в агенте, рядом с его именем выводится значок агента.
Nikitka # 22 августа 2011 в 21:58 0
Сделал как все описано но почему то уже третий день одна и та же картина наблюдается:"Поисковых ботов нет" гостей 3...4....5..и так далее!В чем может быть проблема?Не может же так быть что они за 3 дня так и не заходят ко мне?
seyfer # 11 октября 2011 в 14:26 0
У меня так же. Я точно знаю, что на сайте гугл, а он не отображается.
Юрий # 11 октября 2011 в 18:21 0
Чуть выше есть ссылка на измененный модуль. Скачайте, проверьте. Никто, кто сделал изменения правильно, не пожаловался на работу этого модуля. Единственное исключение - переработанный кем-то вариант с картинками вместо названий поисковых ботов, опубликованный где-то здесь в блогах. Там постоянно на пустом сайте висят 4 гостя, и нет картинок к некоторым ботам, (выводится дырка вместо картинки). Я за тот вариант ответственности не несу.
Проверьте правильность внесенных изменений.
seyfer # 13 октября 2011 в 13:25 0
Исправил, работает. Спасибо