Добрый вечер!
Необходима помощь с 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]]`]]
На выходе получаю названия вложенных альбомов, а вместо их изображений изображения из их корневого альбома(либо ничего, если в корневом альбоме нет изображений).
Помогите, пожалуйста, достучаться до изображений вложенных альбомов.
Почитайте это, может поможет.
Кастомная галерея, дело хорошее, были бы покрепче знания.
Подобное обращение в 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]]` ]]
Как приятно все-таки самому суметь сделать, правда? :)
Согласен, но когда на решение задач есть достаточно времени оно вдвойне приятней.
Тоже верно. Но у других так же может не быть времени на то, чтобы разбираться в чужих скриптах.
Так никто ж насильно и не заставляет в чужом коде копаться. Бывает, что просто сталкивался с подобным и готов с ходу ответить.
В любом случае, Спасибо, что дали наводку в сниппетах покапаться.
Не за что!
Возник еще вопрос… Есть ли возможность сортировать изображения по тегам?
Фильтровать или сортировать? Но в любом случае, нативно — нет. Писать только свой переопределяющий процессор, чтобы дописать немного построение запроса. Тогда как минимум фильтровать получится. С сортировкой сложнее.