[siteStatistics] ip, referer и user-agent
        В новой версии сделаны небольшие, но приятные доработки. Начнём по порядку.
 
Реферер и юзер-агент на всегда полностью помещаются в поле. Чтобы не мучиться с размерами колонок посмотреть их можно по двойному клику.
В списке пользователей теперь есть возможность их удаления. При удалении будет предложено 2 варианта:
В сниппете siteOnlineUsers добавлено 2 свойства:

В полном режиме выводится поименный список пользователей. Имена берутся из поля fullname профиля.
Тоже самое, только для фильтра mFilter2.
Полная документация.
П.С. Теперь в списке пользователей периодически наблюдаю попытки подбора адреса админки, так как при переадресации на страницу 404 в поле реферер пишется набранный адрес. Прикольно.
    
    
                                                        Поля ip, referer и user-agent
В таблице пользователей появились эти три поля. Лично мне особенно интересно поле referer. Видно откуда человек пришёл. Остальные два поля тоже пригодятся. По ним, например, можно вычислить дубли. Иногда, почему-то они появляются. У меня на сайте, если открыть главную страницу в хроме, то статистика почему-то задваивается. В других браузерах такой странности не наблюдается.Реферер и юзер-агент на всегда полностью помещаются в поле. Чтобы не мучиться с размерами колонок посмотреть их можно по двойному клику.
Другие доработки
Ещё для фильтрации пользователей добавлено 2 системные настройки:- stat.not_allowed_ip — список ip адресов через запятую, для которых статистика учитываться не будет.
 - stat.not_allowed_user_agents — то же, что и предыдущая настройка, только для юзер-агентов. Например, для отсечения ботов можно указать «bot,spider,slurp». Поиск идет через preg_match().
 
В списке пользователей теперь есть возможность их удаления. При удалении будет предложено 2 варианта:
- Удалить пользователя и статистику его просмотров.
 - Удалить пользователя, а статистику оставить.
 
В сниппете siteOnlineUsers добавлено 2 свойства:
- fullMode — режим вывода информации о текущих пользователях — короткий (false) или полный (true).
 - tplItem — шаблон для вывода списка текущих пользователей (для полного режима). По-умолчанию, [[+stat.fullname]]
 

В полном режиме выводится поименный список пользователей. Имена берутся из поля fullname профиля.
Сортировка статей по количеству просмотров
Ну и напоследок приведу пример сортировки статей по количеству просмотров с использованием сниппета pdoResource из библиотеки pdoTools.[[!pdoResources?
    &parents=`0`
    &limit=`0`
	&loadModels=`sitestatistics`
	&tpl=`@INLINE [[+id]]. [[+pagetitle]] - [[+views]]`
	&leftJoin=`{
		"Statistics": {
		    "class": "PageStatistics",
			"on": "modResource.id = Statistics.rid"
		}
	}`
	&select=`{
	    "modResource": "*",
	    "Statistics": "IFNULL(SUM(views),0) as views"
	}`
	&groupby=`modResource.id`
	&sortby=`views`
]]Тоже самое, только для фильтра mFilter2.
[[!mFilter2?
    &class=`msProduct`
    &element=`msProducts`
    &loadModels=`sitestatistics`
    &leftJoin=`{
        "Statistics":{"class":"PageStatistics","on":"msProduct.id=Statistics.rid"}
    }`
    &select=`{
        "msProduct":"*",
        "Statistics":"IFNULL(SUM(views),0) as views"
    }`
    &groupby=`msProduct.id`
    &sortby=`views`
]]Полная документация.
П.С. Теперь в списке пользователей периодически наблюдаю попытки подбора адреса админки, так как при переадресации на страницу 404 в поле реферер пишется набранный адрес. Прикольно.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 34
                Спасибо! Теперь знаю и какие роботы постоянно тусуются и что их интересует, т.е. в ЯМетрике то этого нет, а иногда полезно знать. Например, как часто и когда Яндекс новости читают предназначенный для них feed, сколько висит постоянно «читателей» на общем RSS и многое другое. 
            
                    
            
                Было бы здорово группировать результаты по parents и иметь возможность фильтровать их с определенной даты. К примеру, вывести общее количество просмотров всех страниц, у которых parents=1 и дата отсчета статистики с 29.07.2016            
                    
                Подскажите, как вывести статистику по определенному пользователю за определенный период? На фронте.            
                    
                Как-то так
                    [[!pdoUsers?
    &tpl=`@INLINE <p>[[+username]] - [[+views]].</p>`
    &loadModels=`sitestatistics`
    &innerJoin=`{
        "UserStat":{"class":"UserStatistics","on":"modUser.id=UserStat.uid"},
        "PageStat":{"class":"PageStatistics","on":"UserStat.user_key=PageStat.user_key"}
    }`
     &select=`{
        "PageStat": "IFNULL(SUM(PageStat.views),0) as views"
    }`
    &groupby=`UserStat.uid`
    &where=`["UserStat.uid = 1 AND PageStat.date BETWEEN '2016-01-01' and '2016-06-31' "]`
]]В параметре where указывается id пользователя и период.            
                Спасибо!            
                    
                Снимаю галочки с показа некоторых столбцов в бэкенде. Но при обновлении страницы они все же остаются. Можно ли как-нибудь «запоминать» это?            
                    
                Наверно можно.            
                    
                Этого не планируется в следующих версиях?            
                    
                Если разберусь, прикручу.            
                    
                Еще вопрос. Как открыть доступ для других пользователей к статистике в бэкенде?            
                    - list_statistics
 - remove_statistics
 
                В следующей версии добавлю политики. А пока можно в процессорах закомментировать переменную $permission.            
                    
                Вообще, я хотел бы дать доступ только одному пользователю из группы Users и, естестественно, оставить для админа. Можно ли это сделать сейчас каким-нибудь костылем? А в новой версии уже настроить политику.            
                    
                Посмотреть в процессорах права и добавить их в систему в «Настройке доступа». А потом назначить эти права пользователю.            
                    
                Помогите настроить доступ Пользователю группы Manager. Где что прописать?            
                    
                Насколько Вы близко общаетесь с MODX? Знаете что такое политики доступа?            
                    
                Да, знаю. Какие параметры должны быть установлены?            
                    
                Спасибо. Все работает.            
                    
                Не могу понять. Не работает «stat.not_allowed_user_agents». Нужно писать туда «bot,spider,slurp» или полную запись для каждого бота вида «Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)»?            
                    
                «bot,spider,slurp»            
                    
                Почему тогда в «Онлайн» и в «Пользователи» постоянно тусуются боты? :)            
                    
                Боюсь, разочарую, но несмотря на годы практики мне так и не открылся дар телепатии.            
                    
                Ну это понятно.
Я к тому, что может ещё где какие доп. настройки надо делать?
Стоит MODX Revo 2.6.1. После установки плагина кеш чистил. На страницах выводит статистику, в админке показывает, но вот ботов игнорить отказывается.
                    Я к тому, что может ещё где какие доп. настройки надо делать?
Стоит MODX Revo 2.6.1. После установки плагина кеш чистил. На страницах выводит статистику, в админке показывает, но вот ботов игнорить отказывается.
                Что указано в настройке? Какие юзер-агенты у ботов?            
                    
                В настройке поставил, то что написано в инструкции: bot,spider,slurp
В админке в «Онлайн» вижу:
— Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)
— Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)
— Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
— Mozilla/5.0 (compatible; DotBot/1.1; www.opensiteexplorer.org/dotbot, help@moz.com)
и т.д.
Ещё вопрос. Эта настройка не учитывает статистику только для показа в админке или на сайте количество посещений будет тоже без ботов учитываться?
                    В админке в «Онлайн» вижу:
— Mozilla/5.0 (compatible; YandexAccessibilityBot/3.0; +http://yandex.com/bots)
— Mozilla/5.0 (compatible; SemrushBot/2~bl; +http://www.semrush.com/bot.html)
— Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
— Mozilla/5.0 (compatible; DotBot/1.1; www.opensiteexplorer.org/dotbot, help@moz.com)
и т.д.
Ещё вопрос. Эта настройка не учитывает статистику только для показа в админке или на сайте количество посещений будет тоже без ботов учитываться?
                Так в админке они берутся из таблиц статистики. Боты отсекаются в плагине.Попробуйте подебажить. У меня кроме RSS ридеров ни один бот не пролазит.            
                    
                Заглянул в лог. А там беда.
(ERROR @ /.../core/cache/includes/elements/modplugin/18.include.cache.php: 9) PHP warning: preg_match(): Unknown modifier '2'
[2018-10-05 21:37:02]
Вот такие записи каждые 1-4 минуты, начиная с даты установки плагина.
                    (ERROR @ /.../core/cache/includes/elements/modplugin/18.include.cache.php: 9) PHP warning: preg_match(): Unknown modifier '2'
[2018-10-05 21:37:02]
Вот такие записи каждые 1-4 минуты, начиная с даты установки плагина.
                Судя по всему в системной настройке ботов есть слеш.            
                    
                Спасибо за компонент!
Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?
Например есть массив с диапозоннами [«31.173.80.0/21»,«85.26.232.0/22»].
Как получить статистику например увидеть на каких страницах были клиенты?
                    Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?
Например есть массив с диапозоннами [«31.173.80.0/21»,«85.26.232.0/22»].
Как получить статистику например увидеть на каких страницах были клиенты?
Есть вопрос. Возможно ли отфильтровать данные по диапозонам ip адресов?siteStatistics ведёт статистику. А вот анализом придётся заняться самому. Можно через pdoResources.
Как получить статистику например увидеть на каких страницах были клиенты?Открываете список пользователей и кликаете на кнопку «Статистика по ресурсам».
                Подскажите где находится функция которая определяет ip адрес клиента?
Потому что свой ip я не нахожу хотя сижу онлайн на сайте. Возможно из-за того что сайт работает через cloudflare неправильно определяются ip.
                    Потому что свой ip я не нахожу хотя сижу онлайн на сайте. Возможно из-за того что сайт работает через cloudflare неправильно определяются ip.
                Тут.            
                    
                Если я перепешу фунцию в этом файле, то при обновлении она опять перепишется?
                    function getUsetIP(){
    $ip = $_SERVER['REMOTE_ADDR'];
    if ( !empty( $_SERVER["HTTP_CF_CONNECTING_IP"])){
        $ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
    }elseif( !empty($_SERVER['HTTP_X_REAL_IP'])){
        $ip = $_SERVER['HTTP_X_REAL_IP'];
    }elseif( !empty($_SERVER['HTTP_CLIENT_IP'])){
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }elseif( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'])){
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        $commapos = strrpos( $ip , ',' );
        $ip = trim( substr( $ip , $commapos ? $commapos  +  1 : 0 ));
    }
    return $ip;
}            
                Офкоз.
Создайте плагин OnHandleRequest с вышеописанным кодом, а найденный ip засуньте в $_SERVER['REMOTE_ADDR']. Делов то.
                    Создайте плагин OnHandleRequest с вышеописанным кодом, а найденный ip засуньте в $_SERVER['REMOTE_ADDR']. Делов то.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.