Вывод дочерних документов (pdoResources)
Есть страница, на которую при помощи pdoResources + TV должны выводиться изображения. Каждое изображение — это отдельный дочерний документ страницы.
В принципе, тут сложного ничего нет:
В коде шаблона страницы, на которой будут выводиться картинки, пишу:
Но есть нюанс.
Блок div (тот, что был в коде) имеет переменный CSS-класс, в котором прописано количество колонок, которое может быть у этого блока. К примеру, от 1 до 4. При помощи TV в виде выпадающего списка с одиночным выбором, можно выбрать один из CSS-классов.
Проблема в том, что мне нужно, чтобы таких блоков на странице было больше одного. Но сообразить, как это реализовать, не получается.
По сути нужно сделать так, чтобы у страницы А создавался дочерний документ Б, в котором можно из списка выбрать имя CSS-класса для блока, затем уже в документе Б создавать дочерний документ (или несколько), каждый из которых и будет отдельной картинкой. При этом должна быть возможность создать другой дочерний документ у этой же страницы А (назовем его Б2), опять же выбрать имя CSS-класса, после чего нагенерить новых дочерних документов-картинок.
Буду благодарен за подсказку.
В принципе, тут сложного ничего нет:
<div class="[[*TV]]"> (об этом будет чуть ниже)
<ul>
[[pdoResources?
&depth=`0`
&limit=`0`
&tpl=`чанк с кодом элемента списка (<li><img src="[[+tv.picture]]"></li>)`
&includeTVs=`picture`
&includeContent=`1`
&sortby=`{"publishedon":"ASC"}`
]]
</ul>
</div>
Но есть нюанс.
Блок div (тот, что был в коде) имеет переменный CSS-класс, в котором прописано количество колонок, которое может быть у этого блока. К примеру, от 1 до 4. При помощи TV в виде выпадающего списка с одиночным выбором, можно выбрать один из CSS-классов.
Проблема в том, что мне нужно, чтобы таких блоков на странице было больше одного. Но сообразить, как это реализовать, не получается.
По сути нужно сделать так, чтобы у страницы А создавался дочерний документ Б, в котором можно из списка выбрать имя CSS-класса для блока, затем уже в документе Б создавать дочерний документ (или несколько), каждый из которых и будет отдельной картинкой. При этом должна быть возможность создать другой дочерний документ у этой же страницы А (назовем его Б2), опять же выбрать имя CSS-класса, после чего нагенерить новых дочерних документов-картинок.
Буду благодарен за подсказку.
Комментарии: 6
А зачем картинку делать дочерним документом? Чем тебе migx не угодил?
Потому что речь идет не о галерее. И потому что на одной странице будут размещаться картинки в несколько колонок (от одной до четырех). Картинки разного размера и формата. Соответственно, для их вывода разработаны CSS-классы, которые в зависимости от количества колонок будут применяться к элементам списка.
Задача нестандартная, поэтому и попросил тут совета.
Задача нестандартная, поэтому и попросил тут совета.
Не понимаю при чём тут галерея, размер и формат картинок. Если все картинки связаны с один конкретным ресурсом, то нужно создать TV типа migx, в котором будет другой migx. Покажу на примере массива
В чём нестандартность задачи неясно, может быть ты что-то не договариваешь?
[
[
'class' => 'col-1',
'images' => [
'image-1.jpg',
'image-2.jpg'
]
],
[
'class' => 'col-2',
'images' => [
'image-1.jpg',
'image-2.jpg'
]
],
]
И в шаблоне это можно вывести так{foreach $blocks as $block}
<div class="{$block.class}">
<ul>
{foreach $block.images as $img}
<li><img src="{$img}"></li>
{/foreach}
</ul>
</div>
{/foreach}
Ну или использовать сниппет getImageList для обработки полей типа migx. В чём нестандартность задачи неясно, может быть ты что-то не договариваешь?
Спасибо! Буду пробовать это решение. Нестандартная она для меня, так как я не так плотно и часто занимаюсь разработкой ))
Просто там может быть вероятность размещения не только изображений, но и, к примеру, встроенных видеороликов или просто текстовых блоков.
Просто там может быть вероятность размещения не только изображений, но и, к примеру, встроенных видеороликов или просто текстовых блоков.
Сделай просто тестовое поле и пишу туда путь к файлу.
Спасибо, попробую.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.