Для этого я каждому незарегистрированному читателю устанавливаю cookies, чтобы потом его опознать и повторно не считать его же просмотры.
Ну и добавляем новую запись о просмотре в базу (объект TicketView):
// Проверяем, что пользователь неавторизован if ($modx->user->id || $modx->resource->class_key != 'Ticket') return; // Если у пользователя не установлена cookie, устанавливаем if (!$user = (int) $_COOKIE['viewer']) { $c = $modx->newQuery('TicketView'); $c->sortby('uid','DESC'); $c->limit('1'); $maxuser = $modx->getObject('TicketView',$c); $user = (int) $maxuser->get('uid') + 1; SetCookie('viewer',$user,time()+31536000,'/'); } // Проверяем, не смотрел ли этот читатель текущую страницу раньше // Если не смотрел, вносим запись о нем в просмотры страницы $table = $modx->getTableName('TicketView'); $timestamp = date('Y-m-d H:i:s'); $res = $modx->resource->id; $sql = "INSERT INTO {$table} (`uid`,`parent`,`timestamp`) VALUES ($user,$res,'{$timestamp}') ON DUPLICATE KEY UPDATE `timestamp` = '{$timestamp}'"; if ($stmt = $modx->prepare($sql)) { $stmt->execute(); } return;
1. Модель компонента не нужно подключать, он уже подкючен при запуске ядра через addExtensionPackage.
Если же тебе нужен класс Tickets, то достаточно
2. Учет куками не совсем корректен по двум причинам:
— легко накрутить просмотры
— ты пишешь в таблицу, что будущий, еще не зарегистрированный юзер уже посмотрел заметку — это даст неверный счетчик новых комментариев тикета, для него. Ведь он еще не видел страницу, ее кто-то другой посмотрел.
Я много вариантов прокручивал и учет только авторизованных просмотров, на мой взгляд — самый верный.
Скажите, где нужно разместить вышеприведенный код?
Тоже столкнулся с проблемой: не выводится количество просмотров.
Не мог бы ты подсказать, что должно быть вызвано на странице, чтобы считались просмотры? Просто все шаблоны тикетов переделывал и не могу понять, где ошибка :-(
И еще как их потом вывести в getTickets, плейсхолдером сниппета?
Выводит же количество просмотров сниппет TicketMeta. Подробности Василий писал у себя в блоге.
А используя плагин выше просмотры не авторизованных в разделе реализовать можно?
Тебе, как всегда, огромное спасибо за поддержку!
А где настройку count_guests выставить?
Плагин: Tickets — Системные события? Не смог там найти похожего…
Кто не понял: Настройки системы — в поле поиск по кдючу вводим «count_guests » — ставим «Да»
тупо добавил проверку, чтобы он первый просмотр добавлял, вроде заработало.
А так спорный вопрос в решении Василия в подсчете только авторизованными юзерами — практика доказывает обратное.