Если эта тема уже где-то поднималась, извеняюсь - не нашел, укажите пожалуйста.
Стандартный модуль статистики может выдавать количество показов ноды, однако накручивать такой счетчик не составляет труда. Нажатие и удерживание клавиши F5 это демонстрирует.
Так вот, вопрос в следующем, можно ли сделать эту статистику более объективной, чтобы учитывался только один показ для каждого посетителя или для каждой сессии...? Хотя бы, чтоб пример с F5 не работал
Комментарии
Оно Вам надо?
Мое личное мнение : модуль статистики нужно вырубать напрочь.
На самом деле существуют службы учета статистики, те же гугл аналитикс или лив-интернет, ну на худой конец хот-лог.
Нагружать свой сайт лишним модулем, который должен отработать для каждой страницы я бы не стал (учитывая, что есть сторонние службы, которые дают порой более точную и подробную информацию).
Но этот модуль нужен для вывода "самых популярных нод" и прочего такого.
да, и сервер он нагружает говорят
да вот популярные и непопулярные без него не увидешь...
Ну как же, сервисы статистики дают информацию о популярных страницах.
Единственное там не узнаешь сколько времени отработала та или иная страница.
Да, а блоки с ними тоже можно сделать?
Вот именно, мне это нужно именно для вывода самых популярных нод.
Короче говоря, с помощью Views, в блоке я вывожу несколько самых популярных рисунков из галерей. Так что статистику мне нужно считать внутренними средствами.
Может как по другому можно сделать - не знаю. Посоветуйте, пожалуйста.
Ну да, ну да.
В таком случае понятно.
По моему был модуль адвансед статистик (или что то типа того).
Только учтите, что производительности это не прибавит.
Спасибо, попробую адвансед статистик.
А вообще как-то странно, что стандартный модуль этого не позволяет. Хоть бы к сессии привязывали, что-ли...
Cтранно, не нешел модуля с похожим названием. Во всяком случае, на drupal.org
Всем спасибо!
В общем, решение нашел сам, немного подправив стандартный модуль статистики (как вынести свое решение в отдельный модуль - не знаю). При увеличении счетчика посещаемости ноды, ID этой ноды добавляется в $_SESSION. И при последующих посещениях этой ноды, проверяется наличие nid в $_SESSION.
Если кто может посоветовать, как вынести это в отдельный модуль - милости просим, жду советов.
Опубликуйте свое решение как "хак" или "сниппет".
да, стандартный модуль убогий... приходиться юзать google analytics... но неудобно из локалки лишний трафик и прокси авторизацию просит при заходе на локальный сайт.
Господа, а что мешает вам анализировать лог доступа веб-сервера?
Господа, а что мешает вам анализировать лог доступа веб-сервера?
1) В логах не всё есть, поэтому на том же Гугле Аналитиксе больше видов отчётов.
2) Текущие рейтинги тяжко строить по логам... хотя и возможно.
2Slavyansk.net.ru - значит опубликуем как "хак"
Цель хака - сделать так, чтобы стандартный модуль статистики считал просмотры ноды более объективно - за одну сессию учитывается только один просмотр.
Реализация - правим файл "modules/statistics/statistics.module", функцию statistics_exit():
Исходный код функции (жирным выделены добавленные мной строки):
Люди!
До меня только что дошло!
Даже если вы представите это решение как вариант модификации системного модуля - у вас его не примут.
Потому как это противоречит смыслу.
Мы говорим про что? Про количество просмотров данной страницы.
Ограничивать это колличество по одному пользователю или по одной сессии - это не корректно.
Количество просмотров это и есть количество просмотров и не важно одним пользователем или нет.
Может посетитель ходил, ходил по сайту, а потом решил перечитать статью, которую видел в начале и что, мы будем считать, что он ее второй раз не смотрел?
А почему не использовать phpTrafficA?
Можно и тут почитать.
http://drupal.ru/node/6278
Кстати выходит новая версия 2.0
Демо версия http://soft.zoneo.net/phpTrafficA/Demo2.0/
Подписи к картинкам по-русски, анализ путей отличный.
сделал хаком для statistics - само то, что-то же надо в плашках выводить - 0 комментариев, 0 просмотров и т.п. ну и чтобы так просто не накручивались
ну и чего, больше ничего такого нет, что может уникальный подсчет вести просмотров?
Statistics Advanced Settings
шел 2015 год... а модуля все нет
для Drupal 7 добавил код от shock в файл модуля statistics.php
только пришлось еще добавить session_start(); строку в начале
<?php
if (is_numeric($nid)) {
session_start();
$first_time = true;
if (isset($_SESSION['nodes'])){
$nodes = explode(',',$_SESSION['nodes']);
if (!in_array(arg(1),$nodes)){
$nodes[] = arg(1);
}else{
$first_time = false;
}
}else{
$nodes = array();
}
$_SESSION['nodes'] = implode(',',$nodes);
if ($first_time){
db_merge('node_counter')
->key(array('nid' => $nid))
->fields(array(
'daycount' => 1,
'totalcount' => 1,
'timestamp' => REQUEST_TIME,
))
->expression('daycount', 'daycount + 1')
->expression('totalcount', 'totalcount + 1')
->execute();
}
}?>
в общем сделал копию модуля выложил тут https://github.com/alfaq/unick_statistics , качаем папка модуля должна называться unick_statistics. Это стандартный модуль + код выше + переименование всего модуля
Спасибо, надо попробовать
Обнаружилась проблема. Для views модуля пропали поля content statistics: total views (например) я так понимаю нужно найти их от стандартного модуля статистики во views и тоже поправить под модуль выше
рабочий код будет таким, т.к. функция arg в предыдущем случае не возвращала id ноды. В итоге фиксировался только самый первый просмотр на всем сайте за сесиию.
<?phpif (variable_get('statistics_count_content_views', 0) && variable_get('statistics_count_content_views_ajax', 0)) {
$nid = $_POST['nid'];
if (is_numeric($nid)) {
drupal_session_start();
$first_time = true;
if (isset($_SESSION['nodes'])){
$nodes = explode(',',$_SESSION['nodes']);
if (!in_array($nid,$nodes)){
$nodes[] = $nid;
}else{
$first_time = false;
}
}else{
$nodes = array();
}
$_SESSION['nodes'] = implode(',',$nodes);
if ($first_time){
db_merge('node_counter')
->key(array('nid' => $nid))
->fields(array(
'daycount' => 1,
'totalcount' => 1,
'timestamp' => REQUEST_TIME,
))
->expression('daycount', 'daycount + 1')
->expression('totalcount', 'totalcount + 1')
->execute();
}
}
}?>