<?php
/**
* project: Pimcore - Schutzverband Nuernberg Rostbratwuerste
* User: erikb
* Year: 2022
*/
namespace App\Document\Areabrick;
use Pimcore\Http\Request\Resolver\EditmodeResolver;
use Pimcore\Model\Asset\Image\Thumbnail;
use Pimcore\Model\Document\Editable\Area\Info;
use Pimcore\Model\Document\Editable\Relations;
use Pimcore\Translation\Translator;
class Gallery extends AbstractAreabrick {
private $translator;
private $editmode;
public function __construct( Translator $translator, EditmodeResolver $editmodeResolver) {
$this->translator = $translator;
$this->editmode = $editmodeResolver->isEditmode();
}
public function getName() {
return 'Gallery';
}
public function getDescription() {
return 'Generates a slideshow';
}
public function action(Info $info) {
$cssClasses = $info->getParam( 'cssClasses') ?? [];
$info->setParam( 'cssClasses', $cssClasses);
$images = [];
$minHeight = 0;
/** @var Relations $imageRelations */
$imageRelations = $this->getDocumentEditable( $info->getDocument(), 'relations', 'images');
if (!$imageRelations->isEmpty()) {
$imageLinks = $imageRelations->getData();
foreach($imageLinks as $index => $imageLink) {
if ($imageLink instanceof \Pimcore\Model\Asset\Image) {
$gridImageData = \App\Website\Tool\Image::getGridThumbnailMetaData( $imageLink, $info->getParam('columns'), $this->editmode, 'gallery');
/** @var Thumbnail $thumbnail */
$thumbnail = $imageLink->getThumbnail($gridImageData->thumbnail);
$loading = 'lazy';
$decoding = $this->editmode ? 'sync' : 'async';
if (!$this->editmode && ($info->getParam( 'sectionIndex') == 0 && $info->getParam( 'gridIndex') <= 1)) {
$loading = 'eager';
}
$images[] = $thumbnail->getHtml([
'imgAttributes' => [
'loading' => $loading,
'decoding' => $decoding
]
]);
if ($index == 0) {
$minHeight = $thumbnail->getHeight();
}
}
}
}
$autoplay = 0;
$autoplayNumeric = $this->getDocumentEditable( $info->getDocument(), 'numeric', 'autoplay');
if (!$autoplayNumeric->isEmpty()) {
$autoplay = $autoplayNumeric->getData();
}
$info->setParam( 'images', $images);
$info->setParam( 'autoplay', $autoplay);
$info->setParam( 'minHeight', $minHeight);
}
public function needsReload(): bool {
return false;
}
// returns a custom html wrapper element (return an empty string if you don't want a wrapper element)
public function getHtmlTagOpen(Info $info) {
return '';
}
public function getHtmlTagClose(Info $info) {
return '';
}
}