MODх — Учет посетителей сайта и график посещений
MODх — Учет посетителей сайта и график посещений
Как и многие программисты, я страдаю некоторой степенью подозрительности к чужим сервисам, и предпочитаю делать все сам.
К чужим сервисам, в частности относится liveinternet и другие счетчики посещений. Я им как то не доверяю, знаете ли.
Сейчас я вам расскажу (и покажу) как нетрудно сделать учет посетителей сайта с помощью modx.
Этап 1. Пишем лог.
Для начала нам нужно создать таблицу для хранения посещений. Делаем sql запрос как вам удобно. Например, в phpmyadmin.
Таблица готова, теперь нам нужен плагин, для фиксирования посещений.
Большинство пользователей знают про сниппеты и чанки в modx, а вот про плагины обычно не в курсе. Рассказываю: плагин в modx, если по простому — это сниппет, который работает без вызова из документа, сам по себе, реагируя на системные события, коих в движке предусмотрено довольно много. Нас интересует событие OnLogPageHit.
Идем в
Элементы->Управление элементами->Плагины->Создать плагин
Называем новый плагин dbLog и вставляем в него следующий код:
Переключаем вкладку Системные события и выставляем OnLogPageHit, затем жмакаем сохранить. Обратите внимание: при оформлении плагина в редакторе админки не должно быть <?php вначале и ?> в конце. У сниппетов должно, а у плагинов — нет. Не знаю почему так сделано, но при написании своего первого пагина я много матерился.
Все, плагин уже должен фиксировать всех ваших посетителей. Если вы, конечно, нигде не ошиблись!
Кстати, есть еще вариант повешать срабатывание плагина на событие OnWebPageComplete. Тогда нужно будет в настройках админки включить «Регистрировать посещения» и заработает аналогичный тырчик в свойствах документов. Тоже не плохой вариант, но я его еще не обкатывал. Подробнее о событиях можно глянуть тут.
Если вы хотите узнавать имена хостов, которые зарегистрированы на ip ваших посетителей, можно сделать еще один сниппет (Ip2Host) и запускать его по расписанию.
Почему так? Это сэкономит силы серверу, ибо, если узнавать хост юзера при каждом запросе страницы — нагрузка будет нешуточная. Лучше запускать раз в сутки, ночью.
Нужно оформить вызов на какой-нибудь скрытой от посторонних странице:
[!Ip2Host!]
и дергать ее cron`ом:
10 2 * * * * user wget localhost/secret_page.html
Этап второй. Вывод лога на экран.
В принципе, ваши посещения уже в базе, и выводить их оттуда можно как удобно. Лично мне приятно наблюдать это в виде симпатичного графика и отдельной табличке с циферками.
Пишем сниппет для забора данных из БД и вывода их в понятную таблицу, график будем делать позже. Комментарии как обычно, внутри кода.
Создаем сниппет, называем его, например, generateStatGraph, копируем туда код и сохраняем.
Теперь нам нужно как то вывести на экран результат нашей бурной деятельности.
Нам понадобится два чанка-шаблона. первый, просто для таблицы, второй посложнее — для построения графика. Их можно будет использовать независимо друг от друга.
Первый шаблон, для вывода таблицы (tpl.StatTable).
Второй шаблон, для построения графика (tpl.StatGraph).
Как вы можете заметить, эти два шаблона отличаются наличием во втором подключения замечательного плагина jquery jQuery Visualize, который позволяет нам строить графики из таблиц. А также оформление этого графика.
Отрисовка графика запускается следующим кодом (подробнее про параметры jquery.visualize, а также примеры оформления — по ссылке выше):
Уффф… Уже почти все.
Этап 3. Запуск!
Создаем новый документ modx и запускаем в нем сниппет (отдельно таблицу и график).
Хотелось бы отметить, что здесь мы рассмотрели только показ анонимной статистики посещений, а в БД у нас хранится информация об ip, времени посещений, браузерах юзеров и тд. Эту информацию вы можете просматривать или напрямую из БД, или написать простенький сниппет + чанк оформления для вывода на сайт, в защищенный раздел.
Приложение.
Кому любопытно — можно посмотреть результат в работе, заодно воочию зацените хабраэффект.
Кстати, видно некислое различие статистики, которую собираю я, и которую показывает liveinternet на счетчике внизу каждой страницы.