Вывод последнего комментария к тикету
Выводим последний коммент с тикету.
У меня выводится последний коммент «верхнего» уровня, т.е. только коммент а не коммент к комменту…Господи что я пишу
Если нужно выводить именно последний комент, меняем parent => 0 на 1
Топаем в сниппет getTickets, ищем 182 строку
После нее вставляем:
В tpl.Tickets.list.row вставляем плейсхолдер
У меня выводится последний коммент «верхнего» уровня, т.е. только коммент а не коммент к комменту…
Если нужно выводить именно последний комент, меняем 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]]
Комментарии: 12
Как то странно запускать итератор, чобы выбрать только один результат. Также неясно, зачем менять getTickets, если можно использовать &prepareSnippet для подготовки строки?
Сниппет lastComment:
Единственная возможная проблема, это если в массив ресурса попадёт что-то некорректное, что не пройдёт нормально конвертацию в JSON. Тогда можно попробовать:
[[!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);
Решений к сожалению не нашел, то что ваше лучше не спорю. Спасибо!
[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
Скопипастил из комментария, запустил — всё работает.
Убираю &prepareSnippet=`lastComment`- в логе пусто.
p.s. вызываю через m2filter
p.s. вызываю через m2filter
Еще вопрос: как сортировать запись такого типа (картинки, по айди)?
$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.
Василий, вопрос не по теме — как pdoParser активировать, если при установке pdoTools снимал галку?
Нажать кнопку «Переустановить» рядом с пакетом и заново выбрать эту галочку? =)
Вообще должна быть системная настройка специальная, но что-то сходу я её не нашёл, поэтому переустановка — 100% вариант.
Вообще должна быть системная настройка специальная, но что-то сходу я её не нашёл, поэтому переустановка — 100% вариант.
Просто переустанови пакет.
Спасибо, думал системные настройки вернуть, но не нашел путей.
Ваш вариант почему-то не работает с &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`
]]
вернулся к этому вопросу, почему не работает сортировка?
в базе 2 комента с id, 50 и 51. Выводит 50й
в базе 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'
));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.