Bilder-Generierung in eigenem Helper
Hallo zusammen,
ich habe mir damals in Contao 4 einen eigenen Helper geschrieben um die Bildergenerierung für meine Templates zu vereinheitlichen...
diesen habe ich bereits etwas angepasst und nun geht es nur noch um die Bildergenerierung mit Hilfe eines $size Arrays das auch bereits existiert:
PHP-Code:
<?php
namespace VSM_HelperFunctions;
use Contao\FilesModel;
use Contao\System;
use Contao\StringUtil;
use Contao\Image\ResizeConfiguration;
use Contao\Image\PictureConfiguration;
use Contao\Image\PictureConfigurationItem;
use Contao\Image\ImageFactory;
class ImageHelper
{
public static function generateImageHTML($imageSource, $altText = '', $headline = '', $size = null, $class = '', $inSlider = false, $lazy = true)
{
$imageObject = FilesModel::findByUuid($imageSource);
$imageFactory = System::getContainer()->get('contao.image.factory');
$globalLanguage = System::getContainer()->getParameter('kernel.default_locale');
$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);
}
$imageSrc = $imageObject->path;
// Alt und Titel von Metadaten oder alternativ Text verwenden; Headline als Fallback für den Titel
$alt = $meta['alt'] ?: ($meta['title'] ?: ($headline ?: ''));
$title = $meta['title'] ?: ($headline ?: $altText);
$link = $meta['link'] ?: '';
$caption = $meta['caption'] ?: '';
// Verwendet die Standardgröße [null, null, null], wenn $size null ist
$sizeParams = $size ?: [null, null, null];
// Erstellung des HTML-Links, falls vorhanden
$linkStart = $link ? '<a href="' . htmlspecialchars($link) . '" title="' . htmlspecialchars($title) . '">' : '';
$linkEnd = $link ? '</a>' : '';
// Hinzufügen der Klasse, falls vorhanden
// Erstellung des Bild-HTML-Codes
if ($lazy) {
if ($inSlider) {
$classAttribute = $class ? ' class=" ' . htmlspecialchars($class) . '"' : ' class=""';
$imageHTML = $linkStart . '<div class="swiper-lazy-preloader"></div><img' . $classAttribute . ' loading="lazy" src="' . $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="' . $imageSrc . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
}
} else {
if ($inSlider) {
$classAttribute = $class ? ' class=" ' . htmlspecialchars($class) . '"' : ' class=""';
$imageHTML = $linkStart . '<img' . $classAttribute . ' src="' . $imageSrc . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
} else {
$classAttribute = $class ? ' class=" ' . htmlspecialchars($class) . '"' : ' ';
$imageHTML = $linkStart . '<img' . $classAttribute . ' src="' . $imageSrc . '" alt="' . htmlspecialchars($alt) . '" title="' . htmlspecialchars($title) . '">' . $linkEnd;
}
}
// Hinzufügen der Bildunterschrift, falls vorhanden
if ($caption) {
$imageHTML .= '<figcaption class="mt-1 text-muted fs-6">' . htmlspecialchars($caption) . '</figcaption>';
}
return $imageHTML;
}
}
Ich probiere jetzt schon seit einigen Stunden aber ich komme einfach nicht weiter...
Ich möchte innerhalb von $imageSrc den Bildpfad eines generierten Bildes nutzen.
Wie geht das in Contao 5.3 ?
Ich möchte nicht den FigureBuilder o. ä. nutzen, ich möchte einfach nur den Bildpfad eines Bildes.
DANKE und schönes Wochenende!
Liebe Grüße,
Christian
PS: Das ist übrigens der Bildaufruf im Template (Rocksolid Custom Elements-Element)
PHP-Code:
<?= VSM_HelperFunctions\ImageHelper::generateImageHTML($data, null, $this->headline, $this->size, null, true); ?>
$data ist in diesem Fall die UUID des Bildes.