Где хранятся непрочитанные комментарии?
Мне нужно вывести в личном кабинете пользователя количество непрочитанных им комментариев в разных разделах.

Где хранится информация о непрочитанных комментариях? Что-то не могу найти в таблицах базы…
===================================================
UPD1: вылаживаю мой рабочий вариант (спасибо Сергею за подсказку):
Сниппет comments_unread(пробовал объединить запросы в один, не получилось, оставил по отдельности)
UPD2: похоже можно было то же самое сделать и без написания своего сниппета, просто вызвав сниппет getTickets и указав ему параметр &resources=`111`.
Правда по скорости не проверял что быстрее, мне кажется проще пару строк написать, чем вызывать каждый раз целый комбайн ради одной цифры которая может и не быть.

Где хранится информация о непрочитанных комментариях? Что-то не могу найти в таблицах базы…
===================================================
UPD1: вылаживаю мой рабочий вариант (спасибо Сергею за подсказку):
Сниппет comments_unread(пробовал объединить запросы в один, не получилось, оставил по отдельности)
<?php
$user = $modx->user->id;
$page = $input;
// Выбираем время последнего посещения
$result = $modx->query("SELECT `timestamp` FROM `modx_tickets_views` WHERE uid = '{$user}' AND parent = '{$page}'");
$row = $result->fetch(PDO::FETCH_ASSOC);
$timestamp = $row['timestamp'];
// Выбираем время последнего комментария
$result_thread = $modx->query("SELECT `id`, `comment_time` FROM modx_tickets_threads WHERE resource = '{$page}'");
$row_thread = $result_thread->fetch(PDO::FETCH_ASSOC);
$thread = $row_thread['id'];
$comment_time = $row_thread['comment_time'];
if($timestamp < $comment_time) {
$q = $modx->prepare("SELECT * FROM modx_tickets_comments WHERE thread = '{$thread}' AND createdon > '{$timestamp}' AND published = 1");
$q->execute();
$r = $q->fetchAll(PDO::FETCH_ASSOC);
return count($r);
}
else {
return "0";
}Вызываем сниппет (Fenom):{111|comments_unread} // 111 - это id страницылибо обычный вызов:[[!comments_unread?&input=`111`]]UPD2: похоже можно было то же самое сделать и без написания своего сниппета, просто вызвав сниппет getTickets и указав ему параметр &resources=`111`.
Правда по скорости не проверял что быстрее, мне кажется проще пару строк написать, чем вызывать каждый раз целый комбайн ради одной цифры которая может и не быть.
Комментарии: 10
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Видно прийдётся в исходниках Tickets копаться, как он их вытаскивает.
Или он на лету их подсчитывает?
Буду думать как использовать эту логику в своих сниппетах.
Предложу небольшую оптимизацию.
Нужно все-таки проверять $timestamp. А если пользователь ещё не видел ни одного комментария?
Строчки
можно заменить на
Ну и в принципе, я бы второй и третий запрос объединил джойном.
1. За таймштамп спасибо!
2. Замена строчек чем оправдана, большим удобством или скоростью?
3. А можно насчет джойна подробнее? Я пытался, на после неудачных попыток откатился на этот вариант…
3. После первого запроса заменить код
Должно работать. В теории :)
есть раздел в личном кабинете — обращения, пользователь создает тикет, а администратор отвечает на него через комментарии, как можно вывести общее кол-во непрочитанных сообщений с разных тикетов?
Мне кажется для твоего случая лучше именно отдельный сниппет.