Доработка модуля "Кто онлайн?" для отображения поисковых роботов
|
|
Автор: Юрий
Опубликовано: 440 дней назад (9 марта 2011)
Блог: Ковыряем потихоньку...
Рубрика: Приятные мелочи
Редактировалось: 13 раз — последний 20 мая 2011
|
+41↑ Голосов: 47 |
Возникла у меня как-то необходимость понаблюдать посещаемость своего сайта поисковыми роботами, и я решил чуть подработать модуль "Кто онлайн?".
Для этого потребовалось всего три движения.
1. Открываем файл /core/cms.php и находим
2. Далее находим в этом же файле проверку на известных ботов:
3. Открываем файл модуля \modules\mod_whoonline\module.php и находим
В перспективе хочу сделать раздельное отображение пользователей находящихся непосредственно на сайте и через онлайн-агент ICM. Больших сложностей не вижу...
Для этого потребовалось всего три движения.
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>';
//-------------------конец поисковым ботам------------------
В перспективе хочу сделать раздельное отображение пользователей находящихся непосредственно на сайте и через онлайн-агент ICM. Больших сложностей не вижу...| # 9 марта 2011 в 22:59 +1 | ||
|
| # 10 марта 2011 в 00:01 +1 | ||
|
| # 10 марта 2011 в 01:24 +2 | ||
|
| # 10 марта 2011 в 05:26 +2 | ||
|
| # 10 марта 2011 в 06:11 +5 | ||
|
| # 10 марта 2011 в 06:56 +4 | ||
|
| # 10 марта 2011 в 09:02 +2 | ||
|
| # 10 марта 2011 в 09:45 +2 | ||
|
| # 10 марта 2011 в 12:24 +3 | ||
|
| # 10 марта 2011 в 14:58 +2 | ||
|
| # 10 марта 2011 в 13:34 +2 | ||
|
| # 10 марта 2011 в 13:45 +1 | ||
|
| # 11 марта 2011 в 19:42 +3 |
| # 11 марта 2011 в 21:11 +1 | ||
|
| # 11 марта 2011 в 21:13 +3 | ||
|
| # 12 марта 2011 в 12:24 +1 | ||
|
| # 12 марта 2011 в 13:30 +3 | ||
|
| # 12 марта 2011 в 13:34 +5 |
| # 12 марта 2011 в 15:29 +1 |
| # 12 марта 2011 в 19:25 +1 | ||
|
| # 15 марта 2011 в 11:11 0 | ||
|
| # 14 мая 2011 в 22:08 0 | ||
|
| # 20 мая 2011 в 08:45 0 | ||
|
| # 20 мая 2011 в 17:33 0 | ||
|
| # 20 мая 2011 в 18:02 0 | ||
|
| # 22 августа 2011 в 21:58 0 |
| # 11 октября 2011 в 14:26 0 | ||
|
| # 11 октября 2011 в 18:21 0 |
| # 13 октября 2011 в 13:25 0 | ||
|