matuvu
July 18, 2019, 6:17am
1
Hi,
Long story short: I’m trying to make a portfolio site.
I’ve made galleries (basically just re-using the kirby3 theme)
Now I want to select some of these albums to show on specific portfolio pages.
In my blueprint I’m using:
gallery:
type:pages
query: site.find("photography").children
multiple: true
info: "{{ page.images.count }} image(s)"
empty: "No gallery selected"
image:
cover: true
How do I show these in my template?
I now have
<?php foreach (page('photography')->children()->listed() as $album): ?>
<?php if ($cover = $album->cover()): ?><?= $cover->crop(600, 600) ?><?php endif ?>
<?= $album->title() ?> <span><?= $album->subtitle() ?>
<?php endforeach ?>
But that is showing ALL the albums.
I just want those selected albums.
Tried to find example code, but it is harder than I thought…
Tx for helping me out.
You can get all children images like that:
foreach($page->gallery()->toPages()->images() as $image) {}
Or just selected pages:
foreach($page->gallery()->toPages() as $albumPage) {}
The second example @ahmetbora posted gives you the pages selected in your gallery field.
A bit of background explanation:
Your gallery field is a pages field (so basically kind of a multiselect field. It stores the selected pages in yaml format in the content file, like this:
Gallery:
- id/of/page1
- id/of/page2
Kirby provides the toPages()
field method to turn those IDs into a pages collection.
The docs are here: https://getkirby.com/docs/reference/panel/fields/pages , including example how to use in templates.
In your template example, you loop through all the children of the photography
page, ignoring your gallery field.
matuvu
July 18, 2019, 9:25am
4
@texnixe Thanls for this link, somehow missed it totally.
It helped me solve the problem!
for others
<?php $albums = $page->gallery()->toPages(); foreach($albums as $album) ?>
was my missing code