[siteStatistics] Статистика сайта

Компонент для учета просмотра и посещений страниц ресурсов. Альтернатива известного дополнения HitsPage, но с дополнительными возможностями. Учитываются не только просмотры, но и уникальные посещения. А в админке можно посмотреть статистику как по ресурсам в разрезе периодов — день, месяц, год, так и сайта в целом.


Вызывается сниппетом siteStatistics и может работать в двух режимах — page и site.
[[!siteStatistics? &mode=`site`]]
Режим page отвечает за статистику страницы (ресурса), а режим site, соответственно, за статистику всего сайта. По умолчанию указан режим page.

Режим статистики страницы
Сниппет в этом режиме показывает количество посещений или просмотров конкретного ресурса. Указываем в шаблоне или чанке
// Показывает количество просмотров
[[!siteStatistics? &resource=`[[*id]]`]]
или так
//Показывает количество посещений
[[!siteStatistics? &resource=`[[*id]]` &show=`users`]]
В принципе, в данном случае параметр resource можно не указывать, текущий ресурс подхватывается автоматически. А нужен этот параметр для просмотра статистики произвольного ресурса.
Например, в шаблоне новостей указываем
[[!siteStatistics? &resource=`[[+id]]`&count=``]]
и получаем такой блок


Еще важный параметр — count. Он определяет период статистики и принимает следующие значения
  • '' (пустое значение) — Показывает полную статистику без ограничений по периодам. Пример на предыдущей картинке.
  • «byday» — Показывает данные за день. Как в Яндекс.Метрике
  • «bymonth» — Показывает данные за месяц.
  • «byyear» — Показывает данные за год.
Работает в паре с параметром date. Если date не указан, то берутся соответственно текущие дата/месяц/год.

Следующий параметр date. Он указывает, на какую дату выводить статистику. Если не указана, то берется текущая. Формат с учетом параметра count: для «byday» — «YYYY-mm-dd», для «bymonth» — «YYYY-mm», для «byyear» — «YYYY».

Параметр show принимает 2 значения — views и users. Если указан views, то выводится количество просмотров (указан по умолчанию). Если users — то количество посещений.

Параметр toPlaceholders используется для сохранения данных о просмотрах и посещениях в плейсхолдеры [[+stat.views]] и [[+stat.users]] соответственно.
[[!siteStatistics? &toPlaceholders=`1`]]
<div>Просмотры: [[+stat.views]]</div>
<div>Посещения: [[+stat.users]]</div>

Режим статистики сайта
В этом режиме показывается статистика всего сайта. Ставим вызов сниппета в футере
// Дневная статистика
[[!siteStatistics? &mode=`site` &count=`byday`]]
и получаем что-то типа такого

Что-то это напоминает :) Нужно поменять дизайн — меняем шаблон, указанный в параметре tpl.

Административная часть
Как видно по картинке — возможностей для фильтра вполне хватает. Чекбокс «Общая статистика» включает/отключает режим просмотра статистики всего сайта. Текущую запись можно удалить. Так можно очистить статистику у конкретного объекта в конкретный день или у всего сайта вообще или только в указанный период. В общем, ничего сложного.

Но это еще не всё. Если вы закажете этот продукт прямо сейчас, то получите совершенно бесплатно сниппет учета online пользователей. :)
[[!siteOnlineUsers?]]

Он имеет несколько параметров:
  • ctx — контекст, в котором считать пользователей. По-умолчанию считает во всех.
  • toPlaceholder — тут указываем имя плейсхолдера, в который будет сохранятся вывод.
  • tpl — шаблон для вывода.
Системные настройки
  • stat.online_time — Время (в минутах), по истечении которого будет считаться, что пользователь ушел. По-умолчанию 15 минут.
  • stat.enable_statistics — Включает ведение статистики сайта.
  • stat.count_online_users — Включает подсчет пользователей пользователей на сайте. По-умолчанию отключен.
В менеджере посмотреть текущих пользователей можно на второй вкладке.


Полная документация.
Версия 2.0.0. Статистика по пользователям.
Сергей Шлоков
12 июня 2015, 08:01
modx.pro
4
6 440
+8
Поблагодарить автора Отправить деньги

Комментарии: 64

Василий Столейков
12 июня 2015, 11:09
0
Круто!
1. А сколько он будет стоить?
2. «Если вы закажете этот продукт прямо сейчас, то получите совершенно бесплатно сниппет учета online пользователей. :)» — а потом этот сниппет будет тоже платным отдельно или вообще не будет нигде?
    Сергей Шлоков
    12 июня 2015, 11:24
    0
    490 руб. Но прошу не для себя, брат Митька помирает, ухи просит. :))
    а потом этот сниппет будет тоже платным отдельно или вообще не будет нигде?
    Это просто шутка :)
    Павел Ширяев
    12 июня 2015, 11:22
    0
    Нужная штука! Надо будет закупить на свои проекты.

    Как предложение для развития — способность компонента отправлять на указанные емейлы периодические отчеты. Это довольно удобно, — не нужно никуда заходить, чтобы посмотреть статистику.
      Сергей Шлоков
      12 июня 2015, 11:28
      0
      Наверно удобно. А пока думаю мысль про диаграммы.
        Павел Ширяев
        12 июня 2015, 11:32
        0
        Здесь богатое поле для прикручивания новых возможностей :) Например, в свете моего предложения — также считать рост/падение по отношению к прошлому периоду. Можно следить за динамикой, не высчитывая это вручную.

        Единственное, чтобы это не тормозило заметно компиляцию и загрузку страниц.
          Сергей Шлоков
          12 июня 2015, 13:32
          0
          Так вся аналитика в админке, а там и так всё неторопливо работает.
      Михаил Божко
      12 июня 2015, 12:26
      -1
      Один хрен Я.Метрика и Google Analytics рулят. Не вижу смысла городить огород из счётчиков + базу засирать ненужно инфой.
        Владимир
        12 июня 2015, 12:53
        0
        Но Я.Метрика и аналитика от Гугла не дадут возможности сортировать новости по популярности и т.п., а тут, если я правильно понимаю, такая возможность есть. Т.е. это тот же HitsPage, но сильно «жирнее» и мощнее)
          Сергей Шлоков
          12 июня 2015, 13:29
          0
          если я правильно понимаю, такая возможность есть.
          Такая возможность есть!
            Михаил Божко
            12 июня 2015, 14:05
            0
            Если это очень нужно, то можно юзать API tech.yandex.ru/metrika/
              Владимир
              12 июня 2015, 17:57
              0
              API tech.yandex.ru/metrika/ -да, для того, что бы восполнить отсутствие данных о посещении страниц до установки компонента, а потом логичнее юзать [siteStatistics]. Ибо для выборки популярных статей все время обращаться к Метрике, что то мне кажется это неправильным.
            Сергей Шлоков
            12 июня 2015, 13:27
            +2
            А Я.Метрика и Google Analytics так тоже могут?

            А выводить количество текущих пользователей на сайте?
            А вести аналитику по ресурсам?
            Может я отстал и все это уже есть?
            Я не заставляю никого его устанавливать. Пользуйтесь Я.Метрикой и Google Analytics, кто ж мешает.
              Михаил Божко
              12 июня 2015, 14:08
              -1
              Я не представитель Яндекса и тоже не заставляю его юзать. Своё мнение я оставил выше. Ты хочешь меня переубедить?
              Александр Н
              12 июня 2015, 13:34
              0
              Я вот не считаю, что они рулят

              Госдума просит Роскомнадзор проверить шпионские возможности Google

              Персональные данные россиян, материалы обращений граждан в госорганы оказываются доступными для сторонних фирм. Утечка данных может происходить, если на страницах официальных сайтов используются счетчики посещаемости от сторонних производителей — Google, «Яндекса» и др. Об этом говорится в письмах члена комитета Госдумы по безопасности и противодействию коррупции Ильи Костунова, направленных генпрокурору РФ Юрию Чайке, главе Роскомнадзора Александру Жарову и министру экономического развития Алексею Улюкаеву. Депутат просит проверить защищенность данных граждан от несанкционированного сбора через интернет-счетчики, а также запретить использование на государственных сайтах счетчиков от компаний из недружественных к России стран.

              Поэтому компонент очень нужный! Главное что бы был безопасным во всех отношениях
                Михаил Божко
                12 июня 2015, 14:12
                -4
                Рулят они по по техническим возможностям, а не по полит.взглядам.
                Может теперь и Инет запретить, нахер он нужен в Russian Federation, это ведь тоже инструмент шпиона в умелых руках.
              Abu
              Abu
              12 июня 2015, 15:36
              0
              Отличное дополнение. В Tickets правда есть уже TicketViews с теми же возможностями сортировки и т.п. (кроме админки), но Tickets уже монстр, а тут одним компонентом, идеологически имхо правильнее.

              Только вот платность любых мало-мальски полезных компонентов напрягает, наверное поэтому modx.com не делает платных репов, не хватает в последнее время альтруизма в разработчиках)
                Сергей Шлоков
                12 июня 2015, 16:13
                +2
                Так Tickets вроде не считает обычные ресурсы.
                Только вот платность любых мало-мальски полезных компонентов напрягает, наверное поэтому modx.com не делает платных репов, не хватает в последнее время альтруизма в разработчиках)
                Ну не знаю, меня не напрягает. За хорошую вещь совсем не жалко заплатить — отблагодарить автора. Это еще и стимулирует автора поддерживать и развивать продукт. Вот например, в modx.com сколько уже мертвяков висит. Тот же HitsPage или modxTalks давно уже не поддерживаются. Тем более, что есть бесплатная альтернатива (более 600 дополнений на modx.com), а стоимость символическая — это тебе не 79 евро у modmore.com. У modstore.pro дороже 2 тыс. дополнений нет. Тем более, что дополнения покупаются как правило не для себя, а для заказчика и за деньги, за немалые причем :)
                Василий Наумкин
                12 июня 2015, 18:10
                +3
                Только вот платность любых мало-мальски полезных компонентов напрягает, наверное поэтому modx.com не делает платных репов, не хватает в последнее время альтруизма в разработчиках)
                Ну а бешеная активность в магазине и почти ежедневные анонсы тебя не радуют?

                Бесплатные дополнения, в основном, синоним «нате вам, сами разбирайтесь». Такого полно в modx.com, да.
                  Алексей
                  13 июня 2015, 09:12
                  0
                  Очень интересно как идут дела в магазине спустя еще год)
                  modx.pro/store/3336-store-store-simpledream-en-turned-one-year/
                    Сергей Шлоков
                    13 июня 2015, 11:21
                    +2
                    А что мешает зайти на сайт магазина и посмотреть

                    А авторов можно и вручную посчитать: 1, 2, 3, 4,...., 22.
                      Алексей
                      13 июня 2015, 11:32
                      0
                      Как минимум все показатели в двухкратном размере по сравнению с предыдущем годом))
                Василий Столейков
                17 июня 2015, 07:03
                0
                Бандероль в магазин уже отправил.
                Бандероль до магазина так и не доехала? Или я не там искал…
                Рустам С
                17 июня 2015, 18:33
                0
                Пожалуйста подскажите, а как посчитать количество возвратов пользователя?
                Сколько раз он заходил на сайт за месяц например или за все время. Причем он может не авторизовываться постоянно а хранится данные в сессии.
                Сейчас это пытаюсь подсчитывать через аналитику, когорты и тп.
                Нужно как бы подсчитать и вычислить ядро пользователей сайта.
                  Сергей Шлоков
                  18 июня 2015, 07:38
                  0
                  Для этого есть специальные инструменты. Те же Я.Метрика и Google Analytics. Вообще, про это лучше спросить специалистов в этой области.
                  Виталий Дощенко
                  21 июня 2015, 10:28
                  0
                  Разместил в modstore.pro: modstore.pro/packages/utilities/sitestatistics
                    Сергей Шлоков
                    21 июня 2015, 10:48
                    0
                    Грасиас, сеньор! Только в блоках code какие-то странные спаны образовались
                    //Вместо 
                    [[!siteOnlineUsers?]]
                    //Получилось
                    <span class="pun">[[!</span><span class="pln">siteOnlineUsers</span><span class="pun">?]]</span>
                  Сергей Шлоков
                  02 августа 2015, 19:39
                  0
                  Обновление 1.0.2. Добавил вкладку «Текущие пользователи», отображающую список пользователей, находящихся в данный момент на сайте. Для авторизованных выводится имя из профиля, а для неавторизованных просто «Гость».
                    Руслан Кундиус
                    27 августа 2015, 16:20
                    0
                    Хорошо бы в StatOnlineUsers писать и id ресурса, тогда можно онлайн определенной группы страниц вывести)
                    Илья
                    28 января 2016, 15:11
                    0
                    Подскажите, &frontend_css=`` не работает?
                    И как избавится от подключаемых стилей?
                      Сергей Шлоков
                      29 января 2016, 09:59
                      0
                      Пока никак. Можно поправить класс siteStatistics::initialize().
                        Илья
                        29 января 2016, 12:41
                        0
                        Извините, а где это нужно сделать?
                          Сергей Шлоков
                          29 января 2016, 13:40
                          0
                          Можно сделать проще, удалите всё из подключаемого файла стилей.
                        Igor
                        12 октября 2017, 23:58
                        0
                        Илья, это можно сделать в «Системные настройки», это там где шестерёнка в правом верхнем углу админки MODX.
                        Чтобы быстрее найти сам параметр, который нужно заменить, в фильтрах поменяйте «core» на «sitestatistics» и появившихся параметрах, напротив параметра «stat.frontend_css» удалите путь (в колонке — Значение), оставьте его пустым или пропишите путь к своему файлу. Если оставить пустым, то в head не будет вписываться строка со стилем.
                        Алексей Добряков
                        29 января 2016, 13:58
                        0
                        Хочу сделать сортировку товара по самым популярным примерно так:
                        [[msProducts?
                        &parents=`7`
                        &limit=`9`
                        &tpl=`buildTop`
                        &includeThumbs=`360x270,1024x768`
                        &showZeroPrice=`0`
                        &showHidden=`0`
                        &sortby=`[[!siteStatistics? &resource=`[[+id]]` &show=`users`]]`
                        ]]
                        Но это не работает, помогите пожалуйста
                          Алексей Добряков
                          02 февраля 2016, 18:01
                          0
                          Подскажите, пожалуйста как сделать фильтр по «siteStatistics» для msProducts или mFiltrs
                            Сергей Шлоков
                            02 февраля 2016, 19:20
                            0
                            Статистика ресурса ведется в разрезе дня и пользователя. Т.е. надо не просто заджойнить, но и сгруппировать. Запрос очень не простой. С лёту написать я не готов.
                            Александр Н
                            27 февраля 2017, 20:59
                            0
                            Сергей, подскажите пожалуйста. можно ли реализовать с помощью этого дополнения вывод количества скачанных файлов? Сами файлы добавляются через ms2Gallery. Хотя, не обязательно
                              Сергей Шлоков
                              28 февраля 2017, 07:30
                              0
                              Ведётся статистика ресурсов. Файлы к ним не относятся. Поэтому siteStatistics не подойдёт.
                                Александр Н
                                28 февраля 2017, 08:13
                                0
                                Посоветуйте пожалуйста на что лучше обратить внимание?

                                Пока на виду только FileDownloadR, но похоже что он устарел и глючит (судя по отзывам и коментам).

                                Спасибо!
                              Denis
                              04 июня 2017, 02:49
                              0
                              А данный плагин умеет помимо посещений фиксировать источник трафика (URL) и UTM-метки? И есть ли возможность вытащить эти данные и например вставить их в данные формы или заказа?
                              Сама по себе просто статистика посещений мало что дает, а вот метки и рефереры очень бы пригодились.
                                Сергей Шлоков
                                04 июня 2017, 07:38
                                +1
                                siteStatictics не является альтернативой Google.Analytics и и Яндекс.Метрики. Он ведёт:
                                — статистику посещений и просмотров ресурсов, которую можно использовать для сортировки ресурсов по популярности;
                                — статистику посещений пользователей.

                                Ещё он показывает пользователей, которые в текущий момент находятся на сайте. Вот ссылка на полную документацию с описанием всех возможностей компонента.

                                И есть ли возможность вытащить эти данные и например вставить их в данные формы или заказа?
                                UTM-метки — это get параметры. Работать с ними можно как на уровне PHP, так и на уровне Fenom. siteStatistics не ведёт отдельный учёт по этим меткам. Для этого есть гугл и яндекс.
                                ck
                                ck
                                10 февраля 2018, 13:12
                                0
                                Открыл для себя siteStatistics. В полном восторге! Очень просто добавляется и настраивается. А ещё и примеров куча. Спасибо автору!
                                  Viktor
                                  13 марта 2018, 22:06
                                  0
                                  Есть ли еще метод проще и быстрее, который будет выводить id ресурса и количество посмотревших пользователей? Не слишком шарю в запросах к БД, возможно что-то лишнее:
                                  {'!pdoResources' | snippet : [
                                      'loadModels'=>'siteStatistics',
                                      'parents'=>15,
                                      'limit'=>0,
                                      'tpl'=>'@INLINE {$id} - {$users}
                                  ',
                                      'leftJoin'=>'{
                                          "Statistics": {
                                              "class": "PageStatistics",
                                              "on": "modResource.id = Statistics.rid"
                                          }
                                      }',
                                      'select'=>'{
                                          "modResource": "id",
                                          "Statistics": "COUNT(DISTINCT user_key) as users"
                                      }',
                                      'groupby'=>'modResource.id',
                                      'showLog'=>1
                                  ]}
                                    Купчинский Михаил
                                    13 декабря 2018, 19:56
                                    0
                                    Сергей, добрый вечер! У вас в примерах на Вашем сайте есть пример вывода статистики текущего пользователя:
                                    [[!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`
                                    ]]
                                    Я ни как не могу добиться вывода ресурсов с этой конструкцией.
                                    Без вот этой строчки ресурсы выводятся:
                                    &where=`{"Statistics.user_key": "[[+sitestatistics.userKey]]"}`
                                    Понятно что -дело в [[+sitestatistics.userKey]]. Ни понятно откуда она берется?
                                      Сергей Шлоков
                                      13 декабря 2018, 20:13
                                      0
                                      А не феном?
                                        Купчинский Михаил
                                        14 декабря 2018, 12:37
                                        0
                                        Переделал на феном
                                        {'!pdoResources' | snippet : [
                                            'parents'=>0,
                                            'tpl'=>'@INLINE {$pagetitle}',
                                            '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,
                                            'showLog'=>1
                                        ]}
                                        Результат тот же
                                        Лог дает вот такой результат
                                        0.0000341: Loaded model "siteStatistics" from "/core/components/sitestatistics/model/"
                                        0.0000300: pdoTools loaded
                                        0.0000110: xPDO query object created
                                        0.0000789: innerJoined PageStatistics as Statistics
                                        0.0000072: Added selection of modResource: DISTINCT modResource.pagetitle
                                        0.0000072: Processed additional conditions
                                        0.0000849: Added where condition: Statistics.user_key=, modResource.published=1, modResource.deleted=0
                                        0.0000300: Sorted by Statistics.date, DESC
                                        0.0000010: Limited to 5, offset 0
                                        0.0001602: SQL prepared "SELECT DISTINCT modResource.pagetitle FROM `lBA0zBh6yPt3_site_content` AS `modResource` JOIN `lBA0zBh6yPt3_stat_page_statistics` `Statistics` ON modResource.id=Statistics.rid WHERE  ( `Statistics`.`user_key` = '' AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  ORDER BY Statistics.date DESC LIMIT 5 "
                                        0.0012300: SQL executed
                                        0.0000060: Rows fetched
                                        0.0000010: Returning processed chunks
                                        0.0017328: Total time
                                        4 194 304: Memory usage
                                        Значение `Statistics`.`user_key` = '' — пустое.
                                        Если этот же запрос выполнить напрямую в MySQL но в значение подставить какой нибудь user_key из таблицы — то ресурсы выводятся
                                          Сергей Шлоков
                                          14 декабря 2018, 19:10
                                          0
                                          Михаил, в первом варианте я дал намёк — проблема в феном.
                                          Второй вариант, переделанный на феном, невалидный.

                                          Судя по всему у Вас нет опыта работы с феномом. У него есть одна неприятная особенность — он обрабатывает все фигурные скобки, включая те, которые ему не предназначены.
                                          Т.е. у Вас в обоих случаях проблема в where. В первом случае — фигурная скобка, во втором — невалидный код. Вас не смущает имя переменной $sitestatistics.userKey? В PHP так нельзя называть переменные. Это плейсхолдер. Кроме того, фигурные скобки внутри тега Fenom указывать уже не нужно. Дальше справитесь?
                                            Купчинский Михаил
                                            14 декабря 2018, 19:36
                                            0
                                            Сергей, спасибо за ответ! Действительно не увидел, что вы написали «а НЕ феном?»
                                            Я прочитал как «а НА феном»))
                                            Да, с фигурными скобками я погорячился) Это привычка менять [[ на { при переделывании на феном.
                                            Но я все равно не могу понять откуда берется значение в плейсхолдере [[+sitestatistics.userKey]]
                                            И на сколько я понимаю в версии с феномом нужно сначала задать переменную и потом ее вызвать в сниппите.
                                            такой вариант не срабатывает:
                                            var $userkey = [[+sitestatistics.userKey]]
                                              Сергей Шлоков
                                              14 декабря 2018, 19:41
                                              0
                                              Всё за вас молодых делать нужно
                                              'where'=>'{"`Statistics`.`user_key`": "' ~ $_pls["sitestatistics.userKey"] ~ '"}',
                                              Сам плейсхолдер добавляется в классе siteStatistics при загрузке страницы.
                                                Купчинский Михаил
                                                14 декабря 2018, 19:47
                                                0
                                                Так тоже пусто
                                                в логе вот это
                                                0.0000820: Added where condition: `Statistics`.`user_key`=, modResource.published=1, modResource.deleted=0
                                                  Купчинский Михаил
                                                  14 декабря 2018, 20:02
                                                  0
                                                  Заработало в таком виде:
                                                  Убрал лишние одинарные ковычки
                                                  'where'=>'{"`Statistics`.`user_key`": " ~ $_pls["sitestatistics.userKey"] ~ "}',
                                                  Спасибо за подсказку
                                              Сергей Шлоков
                                              14 декабря 2018, 19:35
                                              0
                                              Только дошло. Видимо вы прочитали мой комментарий «А на феном?». А я имел ввиду, не феном ли виноват.
                                        Олег
                                        03 октября 2023, 18:53
                                        0
                                        Добрый день!
                                        [[!siteStatistics? &resource=`[[*id]]`]]
                                        Постоянно получаю ошибку в журнале:

                                        [2023-10-03 18:14:06] (ERROR @ .../core/components/sitestatistics/services/sitestatistics.class.php: 243) [siteStatistics] Could not add page statistics.
                                        [2023-10-03 18:20:33] (ERROR @ .../core/xpdo/om/xpdoobject.class.php: 1452) Error 23000 executing statement:
                                        INSERT INTO `modx_stat_page_statistics` (`rid`, `user_key`, `date`, `month`, `year`, `views`) VALUES (95, 'd282b0b707f6a6e0c2af58018eef14fa', '2023-10-03 00:00:00', '2023-10', '2023', 1)
                                        Array
                                        (
                                        [0] => 23000
                                        [1] => 1062
                                        [2] => Duplicate entry '2023' for key 'year'
                                        )

                                        Как исправить?
                                          Дмитрий
                                          12 января 2024, 23:07
                                          0
                                          Тоже бывает такая ошибка, интересно было бы знать на что ругается…
                                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                          64