Очень часто необходима функция автоматического вывода превью первой картинки в списке тикетов, да и в самом тикете.
Существуют решения, чтоб с помощью плагина при сохранении тикета копировать путь к картинке превью в отдельное поле, но я считаю этот способ немного не универсальным, пусть лучше будет отдельный небольшой сниппет, который сам будет доставать путь к превью первой загруженной картинке.
Для этого необходимо создать сниппет getThumb (скажу сразу, что этот сниппет я нашел уже давно на просторах интернета, так что он не мой, тут моё будет только лайфак по способам его применения):
$q = $modx->newQuery('TicketFile');
$q->limit(1);
$q->select('thumb');
$q->where(array(
'parent' => $input
));
if ($q->prepare() && $q->stmt->execute()) {
return $q->stmt->fetch(PDO::FETCH_COLUMN);
}
Вам будет интересно:Вывести список всех товаров и их цен в minishop2
Теперь для вывода превью в списке тикетов нужно прописать в нашем row чанке для тега img значение атрибута:[[+id:getThumb]], и тогда у нас будет выведена своя картинка-превью для каждого тикета. Выглядит это так:
Если мы хотим сделать то же самое в самом тикете, то нужно прописать [[*id:getThumb]], различается только в получении id. Выглядит это так:
Теперь, если мы хотим, что бы у нас, если отсутствуют загруженные изображения, то выводилось изображение no-image.jpg, для этого мы пропишем вот такую конструкцию для row чанка:
[[+id:getThumb:is=`[[+id]]`:then=``:else=``]]
Для самого тикета, конструкция будет выглядеть так:
[[*id:getThumb:is=`[[*id]]`:then=``:else=``]]
Теперь у нас будут автоматически выводиться самые первые загруженные изображения при создании тикета, а так же картинка-заглушка, если не было загружено ниодного изображения тикету. Этот способ будет работать, если вы используете стандартный источник файлов для Tickets: Tickets Files