Примеры использования siteStatistics

Во всех примерах используется библиотека pdoTools, которая, по моему скромному мнению, является обязательным дополнением.

1. Вывод списка ресурсов с сортировкой по количеству просмотров

[[!pdoResources?
    &tpl=`article.tpl`
    &loadModels=`sitestatistics`
    &leftJoin=`{
        "Statistics": {
            "class": "PageStatistics",
            "on": "modResource.id = Statistics.rid"
        }
    }`
    &select=`{
        "modResource": "*",
        "Statistics": "IFNULL(SUM(views),0) as views, COUNT(DISTINCT user_key) as users"
    }`
    &groupby=`modResource.id`
    &sortby=`views` // `users` для сортировки по посещениям
]] 

Соответственно в чанке можно использовать плейсхолдеры [[+views]] и [[+users]]. Выглядеть это будет приблизительно так


2. Тоже самое, только для mFilter

[[!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, COUNT(DISTINCT user_key) as users"
    }`
    &groupby=`msProduct.id`
    &sortby=`views`
]] 

3. Пример вывода ресурсов, у которых referer содержит строку "google.ru", т.е. на которые заходили с гугла.

[[!pdoResources?
    &parents=`0`
    &tpl=`@INLINE <p>Заголовок "[[+pagetitle]]". Создан {{+createdon:date=`%d.%m.%Y`}}</p>`
    &loadModels=`sitestatistics`
    &where=`["modResource.id IN (SELECT DISTINCT Statistics.rid FROM `modx_stat_page_statistics` AS `Statistics` INNER JOIN `modx_stat_online_users` `StatUser` ON StatUser.user_key = Statistics.user_key and StatUser.referer LIKE '%google.ru%')"]`
]]

4. Пример вывода недавно просмотренных страниц текущего пользователя.

[[!pdoResources?
    &parents=`0`
    &tpl=`@INLINE <p>[[+pagetitle]].</p>`
    &loadModels=`sitestatistics`
    &innerJoin=`{
        "Statistics":{"class":"PageStatistics","on":"modResource.id=Statistics.rid"}
    }`
    &select=`DISTINCT modResource.pagetitle`
    &where=`{"Statistics.user_key": "[[+sitestatistics.userKey]]"}`
    &sortby=`Statistics.date`
    &limit=`5`
]]

Можно ограничить периодом. Для этого нужно немного изменить условие

//1. Просмотренные пользователем ресурсы за текущий день
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.date = CURDATE()"]`
//2. Просмотренные пользователем ресурсы за конкретный день
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.date = '2016-03-05'"]`
//3. Просмотренные пользователем ресурсы за январь
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.month = '2016-01'"]`
//4. Просмотренные пользователем ресурсы за год
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.year = 2016"]`
//5. Просмотренные пользователем ресурсы за период
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.date BETWEEN '2016-01-01' and '2016-03-31' "]`
//6. Просмотренные пользователем ресурсы за последние 7 дней
&where=`["Statistics.user_key = '[[+sitestatistics.userKey]]' AND Statistics.date >= DATE_SUB(CURDATE(),INTERVAL 7 DAY)"]`

5. Вывод статистики по пользователям за указанный период

[[!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": "SUM(PageStat.views) as views"
    }`
    &groupby=`UserStat.uid`
    &where=`["PageStat.date BETWEEN '2016-01-01' and '2016-01-31'"]`
]]

Если нужно вывести статистику только для текущего пользователя, то указываем его в where

&where=`["UserStat.uid = [[+modx.user.id]] AND PageStat.date BETWEEN '2016-01-01' and '2016-01-31'"]`
Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.