Also ich lasse mich gerne vom Gegenteil überzeugen, aber mir ist keine Möglichkeit bekannt das mit Contao-Hausmitteln zu bewerkstelligen:
PHP-Code:
<?php
namespace VSM_HelperFunctions;
use Contao\FilesModel;
use Contao\System;
use Contao\StringUtil;
use Contao\Image\ResizeConfiguration;
class ImageHelper
{
public static function generateImageHTML($imageSource, $altText = '', $headline = '', $size = null, $class = '', $inSlider = false, $colorBox = false, $lazy = true)
{
$imageObject = FilesModel::findByUuid($imageSource);
$originalSrc = $imageObject->path;
$rootDir = System::getContainer()->getParameter('kernel.project_dir');
$globalLanguage = System::getContainer()->getParameter('kernel.default_locale');
$imageFactory = System::getContainer()->get('contao.image.factory');
$currentLanguage = $GLOBALS['TL_LANGUAGE'] ?? $globalLanguage;
if ($imageObject) {
$imageMeta = StringUtil::deserialize($imageObject->meta, true);
$meta = $imageMeta[$currentLanguage] ?? reset($imageMeta) ?? [];
}
// Bildgrößenkonfiguration definieren
$config = new ResizeConfiguration();
if ($size && is_array($size) && count($size) === 3) {
[$width, $height, $mode] = $size;
$config->setWidth($width)
->setHeight($height)
->setMode($mode);
}
$relativeImagePath = $imageObject->path;
$absoluteImagePath = $rootDir . '/' . $relativeImagePath;
try {
$processedImage = $imageFactory->create($absoluteImagePath, $config);
$imageSrc = $processedImage->getPath();
} catch (\Exception $e) {
echo "Fehler beim Bearbeiten des Bildes: " . $e->getMessage();
}
$imageSrc = str_replace($rootDir, "", $imageSrc);
$alt = $meta['alt'] ?? $meta['title'] ?? $altText ?? $headline ?? '';
$title = $headline ?: $meta['title'] ?: $meta['alt'] ?: $altText ?: '';
$link = $meta['link'] ?: '';
$caption = $meta['caption'] ?: '';
// Verwendet die Standardgröße [null, null, null], wenn $size null ist
$sizeParams = $size ?: [null, null, null];
// Hinzufügen der Klasse, falls vorhanden
// Erstellung des Bild-HTML-Codes
if (!empty($colorBox)) {
$linkStart = '<a title="' . $title . '" data-gall="group_' . htmlspecialchars($colorBox) . '" href="' . htmlspecialchars($originalSrc) . '" class="lightbox_' . htmlspecialchars($colorBox) . '">';
$linkEnd = '</a>';
} else {
if (!empty($link)) {
// Erstellung des HTML-Links, falls vorhanden
$linkStart = $link ? '<a href="' . htmlspecialchars($link) . '" title="' . htmlspecialchars($title) . '">' : '';
$linkEnd = $link ? '</a>' : '';
} else {
$linkStart = '';
$linkEnd = '';
}
}
if ($lazy) {
if ($inSlider) {
$classAttribute = $class ? ' class="' . htmlspecialchars($class) . '"' : ' class=""';
$imageHTML = $linkStart . '<div class="swiper-lazy-preloader"></div><img' . $classAttribute . ' loading="lazy" src="' . htmlspecialchars($imageSrc) . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
} else {
$classAttribute = $class ? ' class="lazy ' . htmlspecialchars($class) . '"' : ' class="lazy"';
$imageHTML = $linkStart . '<img' . $classAttribute . ' loading="lazy" data-src="' . htmlspecialchars($imageSrc) . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
}
} else {
if ($inSlider) {
$classAttribute = $class ? ' class="' . htmlspecialchars($class) . '"' : ' class=""';
$imageHTML = $linkStart . '<img' . $classAttribute . ' src="' . htmlspecialchars($imageSrc) . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
} else {
$classAttribute = $class ? ' class="' . htmlspecialchars($class) . '"' : ' ';
$imageHTML = $linkStart . '<img' . $classAttribute . ' src="' . htmlspecialchars($imageSrc) . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
}
}
// Hinzufügen der Bildunterschrift, falls vorhanden
if ($caption) {
$imageHTML .= '<figcaption class="">' . htmlspecialchars($caption) . '</figcaption>';
}
return $imageHTML;
}
}
Und im Template
PHP-Code:
<?= VSM_HelperFunctions\ImageHelper::generateImageHTML($data, $this->headline, strip_tags($data->slide_text), $this->size, null, true, $rand); ?>
Falls das selbe mit Contao und Hausmitteln in dieser kurzen Form (innerhalb des Templates) möglich ist, schieß los :-) Je weniger Ballast desto besser.
Danke und nice weekend!