K3 Page Builder: accessing files for a gallery


#1

@timoetting s K3 Page Builder is fantastic! I’m creating some different Block-Types, e.g. an image gallery.

But i can’t manage to display all selected files (images) with accessing them as files (in order to use the alt and caption text from the file).

The only way i could display the images yet is:

<?php foreach($data->bilder()->yaml() as $bild): ?>
<div>
      <?php if($full = $bild['url']): ?>
      <a class="uk-inline" href="<?php echo $full ?>" alt="Alt" data-caption="Caption 1">
        <img src="<?php echo $full ?>">
      </a>
      <?php endif ?>
</div>
<?php endforeach ?>  

But this way i cant access the files-meta infos and i cannot even crop them :confused:


#2

$data->bilder()->toFiles() doesn’t work?

If not, please provide your blueprint.


#3

No, ->toFile() doesn’t work

The blueprint is:

label: Inhaltsblöcke
type: builder
columns: 1
max: 10
fieldsets:
  bodytext:
    label: Textblock
    tabs:
      content:
        label: Bearbeiten
        icon: edit
        fields:
          text:
            label: Text
            type: textarea
  bildergalerie:
    label: Bildergalerie
    tabs:
      content:
        label: Bearbeiten
        icon: edit
        type: fields
        fields:
          bilder:
            label: Bilder
            type: files
      einstellungen:
        label: Einstellungen
        icon: cog
        fields:
          spalten:
            label: Spalten
            type: select
            options:
              drei: 3-spaltig
              vier: 4-spaltig
              fuenf: 5-spaltig

#4

Hm, ok, this seems to work:

<?php 
foreach($data->bilder() as $bild) {
    if($img = $page->image($bild['filename'])) {
        dump($img);
    }
}
?>

Don’t know if this is the best way…


#5

i tried your snippet right now, but it causes the error “Undefined index: filename”


#6

I figured this out yesterday. ->tofiles() does work. Something doesn’t feel right about your blueprint. I would double check the structure, the german is confusing me :slight_smile:

<?php 
$gallery = $data->bilder()->toFiles();

foreach($gallery as $bild): ?>
  // Remember to check the image exists...
  <img src="<?= $bild->url() ?>">
<?php endforeach ?>  

You have probably taken ->yaml() out an swapped it for ->toFiles().


#7

Hey.

I just pushed a new version that fixes some issues with tabs and the files field. It should now work exactly like accesing images from within a structure field

To access images of a builder fieldset you can use something like this:

<?php foreach($data->images()->toFiles() as $image): ?>
    <?= $image->resize(100) ?>
<?php endforeach ?>

In the old version, this did only work when not having tabs in the fieldset.


#8

Yes, great, with the latest update it all works fine! Thank you so much.