Не могу разобраться с Gallery. Дерево альбомов

Добрый вечер!

Необходима помощь с Gallery на Modx Revo. Точнее с выводом содержимого вложенных альбомов.

Есть галлерея с альбомами, в которых имеются вложенные альбомы. В идеале изображений кроме как во вложенных альбомах не будет.

Задача: Вывести отдельно корневые альбомы галереи. По выбору одного из них отображется блок с заголовками вложенных альбомов и их содержимым соответственно.

Вот примерная схема того, что надо получить:

Что «творю» я:

Код страницы, на которой все должно выводиться

[[!Gallery? &toPlaceholder=`gallery`]]
[[!GalleryAlbums? &toPlaceholder=`galleries`]]
[[!GalleryAlbums? &rowTpl=`galSubAlbumRowTpl` &parent=`[[+gallery.id]]` &showAll=`0` &showInactive=`1` &toPlaceholder=`subgalleries`]]
<div style="float: right">
<h2>Galleries</h2>
<ul>
[[+galleries]]
</ul>
</div>
 
[[!+gallery:notempty=`
<h1><a href="[[~[[*id]]]]">[[+gallery.name]]</a></h1>
[[+subgalleries]] 
`]]

Код чанка galSubAlbumRowTpl

<div id="catalog">
<p>[[+name]]</p>
</div>
[[!Gallery? &album=`[[+name]]`]]

На выходе получаю названия вложенных альбомов, а вместо их изображений изображения из их корневого альбома (либо ничего, если в корневом альбоме нет изображений).

Помогите, пожалуйста, достучаться до изображений вложенных альбомов.

Comments

Кастомная галерея, дело хорошее, были бы покрепче знания. Подобное обращение в galSubAlbumRowTpl мне выдает обложки вложенных альбомов.

<div id="catalog">
<p>[[+name]]</p>
</div>
[[!Gallery? &containerTpl=`SiteGalleryItemTpl` ]]

Но как Ваш код переработать/использовать для вывода их содержимого, до меня не доходит.

К сожалению, с плейсхолдерами я не помогу. Галерея в этом плане весьма не простая, и не прозрачен механизм появления тех или иных плейсхолдеров. Поэтому придется вам или самим ковырять, или ждать кто подскажет если подскажет, или платный проект объявлять.

А если посредством xPDO, не подскажите как сразу к элементам вложенных запрос оформить, а не текущему альбому?

Проблема состояла всего лишь в одном условии сниппета Gallery

if ($modx->getOption('checkForRequestAlbumVar',$scriptProperties,true)) {
    if (!empty($_REQUEST[$albumRequestVar])) $scriptProperties['album'] = $_REQUEST[$albumRequestVar];
}

Решилась задача на этом этапе очень некрасиво, но была срочная необходимость, поэтому за грамотностью не гнался:

if ($modx->getOption('checkForRequestAlbumVar',$scriptProperties,true)) {
    if($scriptProperties['album']!="") $_REQUEST[$albumRequestVar]=$scriptProperties['album'];
    if (!empty($_REQUEST[$albumRequestVar])) $scriptProperties['album'] = $_REQUEST[$albumRequestVar];
}

Код чанка особо не изменился:

<div id="catalog">
<p>[[+name]]</p>
</div>
[[!Gallery? &album=`[[+id]]`]]

А для того, чтобы выводились изображения корневых альбомов, не имеющих вложенных альбомов, немного видоизменил код самой страницы:

[[!Gallery? &toPlaceholder=`gallery`]]
[[!GalleryAlbums? &toPlaceholder=`galleries`]]
[[!GalleryAlbums? &rowTpl=`galSubAlbumRowTpl` &parent=`[[+gallery.id]]` &showAll=`0` &showInactive=`1` &toPlaceholder=`subgalleries`]]

<div style="float: right">
<h2>Galleries</h2>
<ul>
[[+galleries]]
</ul>
</div>

[[!If?
   &subject=`[[+subgalleries]]`
   &operator=`empty`
   &then=`[[+gallery]]`
   &else=`[[+subgalleries]]`
]]

Тоже верно. Но у других так же может не быть времени на то, чтобы разбираться в чужих скриптах.

Так никто ж насильно и не заставляет в чужом коде копаться. Бывает, что просто сталкивался с подобным и готов с ходу ответить.

Фильтровать или сортировать? Но в любом случае, нативно — нет. Писать только свой переопределяющий процессор, чтобы дописать немного построение запроса. Тогда как минимум фильтровать получится. С сортировкой сложнее.