Не редко на сайтах бывает потребность вывести самые обсуждаемые новости, т.е. отсортировать по количеству комментариев к новостям. В данной статье я расскажу как это сделать, используя сниппет Tickets и getResources.

Первым делом нам нужно установить эти пакеты. С getResources сложностей возникнуть не должно, а вот для tickets необходимо из официального репозитория скачать компонент sdStore и установить его (если нужно ввести данные при установке с modstore). После установки и обновления страницы в админке мы увидим возможность выбрать поставщика пакетов для MODx Revo.

Выбираем modstore.pro и жмем Сохранить и перейти в обозреватель пакетов. Далее вбиваем в поиск tickets и скачиваем как обычно.

Чтобы вывести самые обсуждаемые ресурсы или новости, нам необходимо содать следующий сниппет с названием getObs

 
<?php
$resources = array();
$query = $modx->newQuery('TicketThread');
$query->sortby('comment_last','DESC');
$query->limit(3);
$threads = $modx->getCollection('TicketThread',$query);
if ($threads) {
	foreach($threads as $tread){
		$resourc = $tread->get('resource');
		$res = $modx->getObject('modResource', $resourc);
		$resources[] = $resourc;
	}
	$output = implode(',',$resources);
	echo $output;
}

В этом сниппете мы берем последние 3 обсуждаемые новости, если нужно это значение поменять, то оно находится в этой строке $query->limit(3). Далее необходимо сделать корректный вызов сниппета getResources и все (не забываем про лишние пробелы):

 
[ [!getResources?
  &parents=`-1`
  &resources=`[ [!getObs] ]`
  &tpl=`topNewsHideTpl`
  &includeTVs=`1`
  &processTVs=`1`
  &hideContainers=`1`
  &sortby=`link_attributes`
] ]

Вызовы делаем некешируемыми, чтобы обеспечить динамичность блока. В данном вызове мы отключаем параметр parents значением -1, а в параметр resources у нас выведутся наши id самых обсуждаемых ресурсов/новостей через запятую, кроме того важный момент: сортировку нужно поставить по ПУСТОМУ полю у всех ресурсов, где есть комментарии. В моем случае, это link_attributes. Если мы этого не сделаем, то собьем изначальную сортировку. Вот и все!