Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Посмотри код виджета недавно редактированных ресурсов. Там подключается extjs таблица с нужными контролами.
А для виждета новостей достаточно и HTML.
А написать даже простенький туду менеджер для новичка задача трудная.
Самый простой и самый быстрый вариант — выводить полный список и услуг и врачей, а яваскриптом скрывать ненужные пункты. Единственный момент — защита от дурака/хулигана — при сохранении проверять соответствие врача услуге по родителю.
2. Уже есть метод. Зачем его дублировать.
3. После первого запроса заменить код
if (empty($timestamp)) {
	$query = $modx->newQuery('TicketThread', array('resource' => $page));
	$query->select('comments');
	return $modx->getValue($query->prepare());
} else {
	$q = $modx->newQuery('TicketComment');
	$q->innerJoin('TicketThread','Thread', "TicketComment.thread = Thread.id AND Thread.resource = {$page}");
	$q->select('TicketComment.id');
	$q->where('TicketComment.createdon > Thread.comment_time');
	if ($q->prepare() && $q->stmt->execute()) {
		return $q->stmt->rowCount();
	}
}
Должно работать. В теории :)
вылаживаю мой рабочий вариант
Думаю, ты имел ввиду «выкладываю» ;)

Предложу небольшую оптимизацию.
Нужно все-таки проверять $timestamp. А если пользователь ещё не видел ни одного комментария?
Строчки
$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);
можно заменить на
return $modx->getCount('TicketComment', array('thread'=>$thread, 'createdon:>'=>$timestamp, 'published'=>1));
Ну и в принципе, я бы второй и третий запрос объединил джойном.
Есть такая таблица modx_ticket_views. В ней хранится дата последнего просмотра ресурса текущим пользователем. Все комментарии ресурса, у которых дата создания позже даты из этой таблицы, считаются непрочитанными. Они высчитываются на лету.
Копия нужна одна.
Для каждого раздела укажи свой класс. Например,
<body class="faq">
и проверяй в 316 строчке
switch ($(document.body).attr('class')) {
   case 'faq':
	....
	break
   case 'forum':
	....
	break
   default:
	Tickets.Message.info(response.message);
	break
}
Где нужна базовая логика класс не указывай.
А разве при добавлении комментариев есть jGrowl уведомления?
Вижу. При модерации есть. Ну тогда делай копию default.js и правь 316 строчку. Не забудь в настройках указать новый файл.

Жаль что не предусмотрены события чтобы к ним подцепится…

Можно сделать себе и отправить PR.