Примеры использования 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'"]`