Вывод последнего комментария к тикету

Выводим последний коммент с тикету.
У меня выводится последний коммент «верхнего» уровня, т.е. только коммент а не коммент к комменту… Господи что я пишу
Если нужно выводить именно последний комент, меняем parent => 0 на 1


Топаем в сниппет getTickets, ищем 182 строку
// Special fields for quick placeholders

После нее вставляем:
$c = $modx->newQuery('TicketComment');
$c->where(array('thread' => $row['thread'], 'parent' => 0));
$c->sortby('id','DESC');
$ticket_comments = $modx->getIterator('TicketComment',$c);

foreach($ticket_comments as $last_ticket_comment){ 
	$row['last_comment'] = $last_ticket_comment->text;
	break;
}

В tpl.Tickets.list.row вставляем плейсхолдер
[[+last_comment]]
but1head
01 декабря 2014, 20:44
modx.pro
2
1 615
+1

Комментарии: 12

Василий Наумкин
02 декабря 2014, 08:08
+3
Как то странно запускать итератор, чобы выбрать только один результат. Также неясно, зачем менять getTickets, если можно использовать &prepareSnippet для подготовки строки?

[[!getTickets?
	&parents=`0`
	&prepareSnippet=`lastComment`
]]

Сниппет lastComment:
<?php
$comment = $pdoFetch->getArray('TicketComment',
	array('parent' => 0),
	array(
		'innerJoin' => array(
			'Thread' => array(
				'class' => 'TicketThread',
				'on' => 'TicketComment.thread = Thread.id AND Thread.resource = ' . $row['id'])
		),
		'select' => 'text',
		'sortdir' => 'DESC'
	)	
);

$row['last_comment'] = !empty($comment)
	? $comment['text']
	: '';
	
return json_encode($row);
Это должно работать быстрее.

Единственная возможная проблема, это если в массив ресурса попадёт что-то некорректное, что не пройдёт нормально конвертацию в JSON. Тогда можно попробовать:
return serialize($row);
    but1head
    02 декабря 2014, 10:04
    0
    Решений к сожалению не нашел, то что ваше лучше не спорю. Спасибо!
      but1head
      02 декабря 2014, 11:43
      0
      [2014-12-02 12:43:38] (ERROR @ /index.php) [pdoTools] Could not load collection of "TicketComment": Error 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `TicketComment`.`parent` = 0 ORDER BY TicketComment.id DESC LIMIT 1' at line 1
        Василий Наумкин
        02 декабря 2014, 12:43
        0
        Скопипастил из комментария, запустил — всё работает.
          but1head
          02 декабря 2014, 12:44
          0
          Убираю &prepareSnippet=`lastComment`- в логе пусто.
          p.s. вызываю через m2filter
            but1head
            03 декабря 2014, 13:06
            0
            Еще вопрос: как сортировать запись такого типа (картинки, по айди)?
            $preview = $pdoFetch->getObject('Ticket', $row['id'], array(
            			'leftJoin' => array(
            				'Preview' => array('class' => 'TicketFile', 'on' => '`Preview`.`parent` = `Ticket`.`id`'),
            			),
            			'select' => array(
            				'Preview' => '`Preview`.`thumb` as `preview`', 
            			)
            ));
            $row = array_merge($row, $preview);
            
            
            return json_encode($row);
            Сделал по аналогии с $additional_fields.
              Wassi Wassinen
              03 декабря 2014, 15:01
              0
              Василий, вопрос не по теме — как pdoParser активировать, если при установке pdoTools снимал галку?
                Алексей Карташов
                03 декабря 2014, 16:16
                +1
                Нажать кнопку «Переустановить» рядом с пакетом и заново выбрать эту галочку? =)

                Вообще должна быть системная настройка специальная, но что-то сходу я её не нашёл, поэтому переустановка — 100% вариант.
                  Василий Наумкин
                  03 декабря 2014, 16:26
                  0
                  Просто переустанови пакет.
                    Wassi Wassinen
                    03 декабря 2014, 17:34
                    0
                    Спасибо, думал системные настройки вернуть, но не нашел путей.
                  but1head
                  08 декабря 2014, 16:01
                  0
                  Ваш вариант почему-то не работает с &limit, белый экран, лог пустой

                  [[!mFilter2? 
                  			  &element=`getTickets` 
                  			  &parents=`3` 
                  			  &includeTVs=`address,coords,phone` 
                  			  &limit=`5`
                                            &prepareSnippet=`TicketExtended` 
                  			  &suggestions=`0`
                  			  &filters=`
                  				  tv|services_services:default
                  			  ` 
                  			  &tpl=`tpl.Tickets.list.row` 
                  		  ]]
              but1head
              16 апреля 2015, 19:45
              0
              вернулся к этому вопросу, почему не работает сортировка?
              в базе 2 комента с id, 50 и 51. Выводит 50й
              $pdoFetch->getObject('Ticket', $row['id'], array(
              			'leftJoin' => array(
              				'LastComment' => array('class' => 'TicketComment', 'on' => '`LastComment`.`thread` = '.$row['thread']),
              			),
              			'select' => array(
              				'LastComment' => '`LastComment`.`raw` as `last_comment`',
              			),
              			'sortby' => array(
              				'LastComment' => '`LastComment`.`id`',
              			),
              			'sortdir' => array(
              				'LastComment' => 'ASC',
              			),
              			'groupby' => $class.'.id'
              		));
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                12