Для этого я каждому незарегистрированному читателю устанавливаю 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, то достаточно
$Tickets = $modx->getService('tickets');2. Учет куками не совсем корректен по двум причинам:— легко накрутить просмотры
— ты пишешь в таблицу, что будущий, еще не зарегистрированный юзер уже посмотрел заметку — это даст неверный счетчик новых комментариев тикета, для него. Ведь он еще не видел страницу, ее кто-то другой посмотрел.
Я много вариантов прокручивал и учет только авторизованных просмотров, на мой взгляд — самый верный.
Скажите, где нужно разместить вышеприведенный код?
Тоже столкнулся с проблемой: не выводится количество просмотров.
Не мог бы ты подсказать, что должно быть вызвано на странице, чтобы считались просмотры? Просто все шаблоны тикетов переделывал и не могу понять, где ошибка :-(
И еще как их потом вывести в getTickets, плейсхолдером сниппета?
Выводит же количество просмотров сниппет TicketMeta. Подробности Василий писал у себя в блоге.
А используя плагин выше просмотры не авторизованных в разделе реализовать можно?
Тебе, как всегда, огромное спасибо за поддержку!
А где настройку count_guests выставить?
Плагин: Tickets — Системные события? Не смог там найти похожего…
Кто не понял: Настройки системы — в поле поиск по кдючу вводим «count_guests » — ставим «Да»
тупо добавил проверку, чтобы он первый просмотр добавлял, вроде заработало.
if ($maxuser->get('uid')) { $user = (int) $maxuser->get('uid') + 1; } else { $user = 0; }А так спорный вопрос в решении Василия в подсчете только авторизованными юзерами — практика доказывает обратное.