"Кто онлайн?" в версии 1.10+
Для того, чтоб эта вся конструкция работала, необходимо подпилить файл /core/cms.php (только в начале не забудьте сделать бэкап!!! На всякий случай) ).
Находим в файле cms.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}");
}
И заменяем на это:
//Проверяем, пользователь это или поисковый бот
$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.
Спсибо автору - [Ссылки скрыты от гостей Зарегистрируйтесь.]Добавлено спустя 5 минутДля работы в версии 1.10.3 нужно проделать следующие манипуляции.
1. В файле cms.php находим функцию:
Код PHP:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* * Очищает очередь сообщений сессии */ений сессии */ public static function clearSessionMessages(){
2. И после нее добавляем функцию onlineStats():
Код PHP:
3. Выполняем SQL-запрос к базе данных для создания таблицы cms_online:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * Обновляет статистику посещений сайта */сещений сайта */ public function onlineStats(){ $inDB = cmsDatabase::getInstance(); $bots['Aport'] ='Aport'; $bots['msnbot'] ='MSNbot'; $bots['Yandex'] ='Yandex'; $bots['Lycos.com'] ='Lucos'; $bots['Googlebot'] ='Google'; $bots['Openbot'FAST-WebCrawler'penfind'; $bots['; $bots['rawler'] ='] =''; $bots['TurtleScanner'] ='TurtleScanner'; $bots['Yahoo-MMCrawler'] ='Y!MMCrawler'; $bots['Yahoo!'] ='Yahoo!'; $bots['rambler'] ='Rambler'; $bots['W3C_Validator'] ='W3C Validator'; $bots['bingbot'] ='bingbot'; $bots['magpie-cr//удаляем старые записи wler'; //удаляем старые записи $sql = "DELETE FROM cms_online WHERE lastdate <= DATE_SUB(NOW(), INTERVAL ".ONLINE_//собираем информацию о текущем пользователе l) ; //собираем информацию о текущем пользователе $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 ('$i//Если пользователь уже онлайн, обновляем время '$page')"; $inDB->query($sql) ; } else { //Если пользователь уже онлайн, обновляем время $sql = "UPDATE cms_online SET lastdate = NOW(), user_id = '$user_id',
Код PHP:
4. А затем включаем модуль. По логике, все должно заработать.
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, ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Только не забудьте перед изменениями сделать бэкапы!!!!