Модуль "кто on-line" Joomla, нужна помощь

[Удален]
417

Модуль "кто on-line" Joomla показывает на мой взгляд не верные данные, по сравнением со счетчиком ли.ру. (в 2 часа дня на сайте по ли.ру побывало всего 90 человек, а он пишет что мол в данный момент на сайте он-лайн 45-50, и значение меняется постоянно, и увеличивается и уменьшается)

Читал где то в архиве форума, что он возможно учитывает ботов ПС, или учитывает за некий период времени.

Модуль нужен, хочется его оставить, но нужны правдивые данные. Подскажите как его исправить? может кто то переделывал?

[Удален]
#1

Модуль показывает пользователей, который были активны в последние n минут, насколько я помню, было 15.

[Удален]
#2
teent:
Модуль показывает пользователей, который были активны в последние n минут, насколько я помню, было 15.

А это значение возможно ли поменять? Да и как то все равно много. если бы за последние 6 часов то да, совпадало бы...

[Удален]
#3

Для начала отключите кэширование для модуля.

[Удален]
#4
teent:
Для начала отключите кэширование для модуля.

А по другому и нельзя...

[Удален]
#5

Если это не помогло, попробуйте выполнить следующие шаги.

Сделайте бэкап файла /modules/mod_whoisonline/helper.php

Откройте /modules/mod_whoisonline/helper.php

Найдите

$query = ‘SELECT guest, usertype, client_id’ .
‘ FROM #__session’ .
‘ WHERE client_id = 0′;

Замените на

$datenow = date(“Y-m-d H:i:s”);
$time_string = strtotime($datenow);
// Показываем гостей, которые активны в последние 10 минут
$extra_time = 600; // 600 секунд = 10 минут
$online_time = ($time_string-$extra_time);

$query = “SELECT a.guest, a.usertype, a.client_id”
.”\n FROM #__session AS a”
.”\n WHERE a.client_id=0 AND a.time>’$online_time’”;

Найдите

$query = ‘SELECT DISTINCT a.username’ .
‘ FROM #__session AS a’ .
‘ WHERE client_id = 0′ .
‘ AND a.guest = 0′;

Замените на


$datenow = date(“Y-m-d H:i:s”);
$time_string = strtotime($datenow);
// Активные зарегистрированные пользователи
$extra_time = 600; //10 минут x 60 секунд
$online_time = ($time_string-$extra_time);

// Учитываем зарегистрированных пользователей за последние 10 минут
$query = “SELECT DISTINCT a.username, a.userid, u.name”
.”\n FROM #__session AS a, #__users AS u”
.”\n WHERE (a.userid=u.id) AND (a.guest = 0) AND (NOT ( a.usertype is NULL OR a.usertype = ” )) AND a.time>’$online_time’”
.”\n ORDER BY “.(($ueConfig['name_format'] > 2) ? “a.username” : “u.name”).” ASC”;

Теперь Вы можете менять переменную активности и учитывать только пользователей за последние n минут.

[Удален]
#6

	$query = 'SELECT guest, usertype, client_id' .

' FROM #__session' .
' WHERE client_id = 0';
$db->setQuery($query);
$sessions = $db->loadObjectList();

if ($db->getErrorNum()) {
JError::raiseWarning( 500, $db->stderr() );
}

if (count($sessions)) {
foreach ($sessions as $session) {
// if guest increase guest count by 1
if ($session->guest == 1 && !$session->usertype) {
$guest_array ++;
}
// if member increase member count by 1
if ($session->guest == 0) {
$user_array ++;
}
}
}

$result['user'] = $user_array;
$result['guest'] = $guest_array;

return $result;
}

// show online member names
function getOnlineMemberNames() {
$db =& JFactory::getDBO();
$result = null;

$query = 'SELECT DISTINCT a.username' .
' FROM #__session AS a' .
' WHERE client_id = 0' .
' AND a.guest = 0';
$db->setQuery($query);
$result = $db->loadObjectList();

if ($db->getErrorNum()) {
JError::raiseWarning( 500, $db->stderr() );
}

return $result;
}
}

У меня выглядит так этот файл. При замене выше упомянутых строк, сайт перестает работать)

Что после первого куска что после второго остаются

$db->setQuery($query);

$result = $db->loadObjectList();

Их нужно убрать?

Убрал не работает...

Оставил не работает.

В чем то ошибка остаеться после замены..

Вот так получилось

class modWhosonlineHelper {


// show online count
function getOnlineCount() {
$db =& JFactory::getDBO();
$sessions = null;
// calculate number of guests and members
$result = array();
$user_array = 0;
$guest_array = 0;

$datenow = date(“Y-m-d H:i:s”);
$time_string = strtotime($datenow);
// Показываем пользователей, которые активны в последние 10 минут
$extra_time = 300; // 600 секунд = 10 минут
$online_time = ($time_string-$extra_time);

$query = “SELECT a.guest, a.usertype, a.client_id”
.”\n FROM #__session AS a”
.”\n WHERE a.client_id=0 AND a.time>’$online_time’”;


if ($db->getErrorNum()) {
JError::raiseWarning( 500, $db->stderr() );
}

if (count($sessions)) {
foreach ($sessions as $session) {
// if guest increase guest count by 1
if ($session->guest == 1 && !$session->usertype) {
$guest_array ++;
}
// if member increase member count by 1
if ($session->guest == 0) {
$user_array ++;
}
}
}

$result['user'] = $user_array;
$result['guest'] = $guest_array;

return $result;
}

// show online member names
function getOnlineMemberNames() {
$db =& JFactory::getDBO();
$result = null;

// Новый запрос с учетом времени
$query = “SELECT DISTINCT a.username, a.userid, u.name”
.”\n FROM #__session AS a, #__users AS u”
.”\n WHERE (a.userid=u.id) AND (a.guest = 0) AND (NOT ( a.usertype is NULL OR a.usertype = ” )) AND a.time>’$online_time’”
.”\n ORDER BY “.(($ueConfig['name_format'] > 2) ? “a.username” : “u.name”).” ASC”;


if ($db->getErrorNum()) {
JError::raiseWarning( 500, $db->stderr() );
}

return $result;
}
}
[Удален]
#7

Напишите в скайп, исправим.

mteent

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий