ПолезностиМодуль "Кто онлайн" с поисковыми ботами

Главные вкладки

Модуль "Кто онлайн" с поисковыми ботами

Доработка модуля кто онлайн?

Подпиливаем файл /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) ;
    }

Потом скачиваем модуль и распаковываем в корень сайта.

И все! Получаем:
kto_onlayn.jpg 

Проверено на 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;

А затем включаем модуль. По логике, все должно заработать

[adsense:468x60:1270571931]

Скачать: 
Категория: 
Модули Instantsmc