При вызове стандартного сниппета (3 штуки на одной странице), возникла проблема отлавливания плейсхолдеров. Плейсхолдеры не обновлялись после каждой итерации. Решил не тратить много времени на решение неизвестной проблемы, написал свой сниппет. Данный сниппет выводит информацию из нескольких альбомов одновременно.
| Параметр | Описание | По умолчанию |
| ids | ID альбомов через запятую | |
| tpl |
Чанк для каждого элемента. Плейсхолдеры: id - ID альбома, name - название альбома, url - ссылка на картинку |
Создаем новый сниппет с названием gallery_items
<?php
$albums = [];
$path = '/assets/gallery/';
$modx->addPackage('gallery', MODX_CORE_PATH . 'components/gallery/model/');
//trim space
if ($ids) {
$ids = explode(',', $ids);
$ids = array_map('trim', $ids);
}
$items = $modx->getCollection('galAlbumItem', [
'album:IN' => $ids
]);
foreach ($items as $item) {
$album = $item->getOne('Album');
$image = $item->getOne('Item');
//get array of albums with items
if (!array_key_exists($album->id, $albums)) {
$albums[$album->id] = [
'id' => $album->id,
'name' => $album->name,
'items' => []
];
}
//push items
array_push($albums[$album->id]['items'], $path . $image->filename);
}
//get output
foreach ($albums as $album) {
foreach ($album['items'] as $url) {
$output .= $modx->getChunk($tpl, [
'id' => $album['id'],
'name' => $album['name'],
'url' => $url
]);
}
}
return $output;
Вызов сниппета:
[[!gallery_items?
&ids=`1,2,3`
&tpl=`tpl.gallery`
]]