Как вывести количество комментариев в Tickets

Как вывести количество комментариев в Tickets

В составе компонента 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 нам нужно передать идентификатор ресурса, у которого мы считаем комментарии. 

Оцените статью:

Проголосовало: 53

Комментарии (1)

  1. Кирилл 09 июня 2017, 15:03 # 0
    Вопрос касается счетчика, но правда в портфолио, одного из вашего уроков(блог), как в данном случае вывести количество ресурсов по tv:
    <?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;