ПолезностиМодуль "Кто онлайн" с поисковыми ботами
Главные вкладки
Доработка модуля кто онлайн?
Подпиливаем файл /core/cms.php (не забудьте сделать бэкап!!! На всякий случай) ).
Находим в файле cms.php:
Код PHP:
//Проверяем, пользователь это или поисковый бот
$crawler = false;
foreach($bots as $bot=>$uagent){ if (mb_strpos($useragent, $uagent)) { $crawler = true; break; } }
//Если не бот, вставляем/обновляем запись в "кто онлайн"
if (!$crawler){
// При аякс запросах не к чему записывать url
$page_sql = (@$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') ? '' : ", viewurl = '$page'";
$inDB->query("INSERT IGNORE INTO cms_online (ip, sess_id) VALUES ('$ip', '$sess_id') ON DUPLICATE KEY UPDATE user_id = '$user_id', agent = '$useragent' {$page_sql}");
}
И заменяем на это:
Код PHP:
$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) ;
if (!$inDB->num_rows($result)){
$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) ;
} else {
//Если пользователь уже онлайн, обновляем время
$sql = "UPDATE cms_online
SET lastdate = NOW(),
user_id = '$user_id',
viewurl = '$page'
WHERE (sess_id = '$sess_id' AND ip = '$ip')";
$inDB->query($sql) ;
}
Потом скачиваем модуль и распаковываем в корень сайта.
И все! Получаем:
Проверено на 1.10, 1.10.1, 1.10.2.
Для работы в версии 1.10.3 нужно проделать следующие манипуляции.
1. В файле cms.php находим функцию:
Код PHP:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
* Очищает очередь сообщений сессии
*/
public static function clearSessionMessages(){
unset($_SESSION['core_message']);
}
И после нее добавляем функцию onlineStats():
Код PHP:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* Обновляет статистику посещений сайта
*/
public function onlineStats(){
$inDB = cmsDatabase::getInstance();
$bots = array();
$bots['Aport'] ='Aport';
$bots['msnbot'] ='MSNbot';
$bots['Yandex'] ='Yandex';
$bots['Lycos.com'] ='Lucos';
$bots['Googlebot'] ='Google';
$bots['Openbot'] ='Openfind';
$bots['FAST-WebCrawler'] ='AllTheWeb';
$bots['TurtleScanner'] ='TurtleScanner';
$bots['Yahoo-MMCrawler'] ='Y!MMCrawler';
$bots['Yahoo!'] ='Yahoo!';
$bots['rambler'] ='Rambler';
$bots['W3C_Validator'] ='W3C Validator';
$bots['bingbot'] ='bingbot';
$bots['magpie-crawler'] ='magpie-crawler';
//удаляем старые записи
$sql = "DELETE FROM cms_online WHERE lastdate <= DATE_SUB(NOW(), INTERVAL ".ONLINE_INTERVAL." MINUTE) LIMIT 5";
$inDB->query($sql) ;
//собираем информацию о текущем пользователе
$sess_id = session_id();
$ip = self::strClear((string)$_SERVER['REMOTE_ADDR']);
$useragent = self::strClear((string)$_SERVER['HTTP_USER_AGENT']);
$page = self::strClear((string)$_SERVER['REQUEST_URI']);
$user_id = cmsUser::getInstance()->id;
$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) ;
if (!$inDB->num_rows($result)){
$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) ;
} else {
//Если пользователь уже онлайн, обновляем время
$sql = "UPDATE cms_online
SET lastdate = NOW(),
user_id = '$user_id',
viewurl = '$page'
WHERE (sess_id = '$sess_id' AND ip = '$ip')";
$inDB->query($sql) ;
}
}
Выполняем SQL-запрос к базе данных для создания таблицы cms_online:
Код PHP:
DROP TABLE IF EXISTS `cms__online`;
CREATE TABLE `cms__online` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(15) NOT NULL,
`sess_id` varchar(100) NOT NULL,
`lastdate` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`user_id` int(11) NOT NULL,
`agent` varchar(250) NOT NULL,
`viewurl` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
UNIQUE KEY `sess_id` (`sess_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
А затем включаем модуль. По логике, все должно заработать
Похожие статьи
Аватар в меню пользователя со ссылкой на его профиль (для версий 1.10.5 и 1.10.6)
Три фильтра для сокрытия текста от гостей и небольшой костыль для ссылок
Компонент "Встречи" для InstantCMS 10.х
Плагин "Стоп СпамБот"(p_stopspambot) v 1.0.0
Интеграция 1С с InstantShop
Избранные каналы Ютуба для Instant CMS 2.1.x
Плагин для скрытия ссылок от гостей и ботов Instantlock
Модуль инф, чат-бот Киса и Некточат для instantcms 10.1 - 10.6
Комментарии