В составе компонента Tickets нет сниппета подсчета комментариев (ticketCommentCount), поэтому приходится выкручиваться и искать решения данной проблемы. А оно, оказывается, очень простое. Достаточно написать сниппет, в котором мы произведем запрос к базе данных и подсчитаем количество строк в результате работы запроса:
<?php
$q = $modx->newQuery('modResource', $id);
$q->leftJoin('TicketThread','TicketThread', "`TicketThread`.`name` = 'resource-{$id}'");
$q->leftJoin('TicketComment','TicketComment', "`TicketThread`.`id` = `TicketComment`.`thread`");
$q->where(array(
'TicketComment.published' => 1
));
$q->select('COUNT(`TicketComment`.`id`) as `comments`');
$count = 0;
if ($q->prepare() && $q->stmt->execute()) {
$count = (integer) $q->stmt->fetch(PDO::FETCH_COLUMN);
}
return $count;
Вызвать можно следующим образом:
[[!ticketCommentCount:default=`0`? &id=`[[+id]]` ]]
В параметр ID нам нужно передать идентификатор ресурса, у которого мы считаем комментарии.
<?php $tvid = 6; $result = array(); $temp = array(); $output = ''; $q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid)); $q->select('contentid,value'); if ($q->prepare() && $q->stmt->execute()) { while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) { $val = explode(',',$row['value']); $temp = array_merge($temp,$val); } } $result = array_unique($temp); foreach ($result as $item){ $output .= '<li><a href="#" class="'.$item.'">'.$item.'</a></li>'; } echo $output;