-
RSCE und Random-Bild
Über ein RSCE erstelle ich eine eigene Zufalls-Ausgabe. (siehe auch hier)
Zum Testen habe ich eine einfache Auswahl eines Bildes erstellt und mit der Template-Abfrage scheitere ich nun. Genauer gesagt damit wie ich das Bild angezeigt bekomme.
PHP-Code:
<?php
return[
'label' => ['Zufallsbild','Erstellen Sie Bilder mit Verlinkungen, die in zufälliger Reihenfolge ausgegeben werden.'],
'types' => ['content','module'],
'standardFields' => ['cssID'],
'contentCategory' => 'beRecont',
'moduleCategory' => 'beRecont',
//'beTemplate' => 'be_wildcard',
'fields' => [
'partners' => [
'label' => ['Partner','Wählen Sie die Partner Logos aus.'],
'elementLabel' => '%s. Partner',
'inputType' => 'list',
'minItems' => 1,
'fields' => [
'logo' => [
'label' => [
'de' => ['Logo','Wählen Sie das Partner-Logo aus.'],
],
'inputType' => 'fileTree',
'eval' => [
'fieldType' => 'radio',
'filesOnly' => true,
'extensions' => \Config::get('validImageTypes'),
'tl_class' => 'clr w50',
],
],
],
],
],
];
Bisher habe diese Ausgabe - gibt aber eben aktuelle nur UUID aus.
PHP-Code:
<?php
$elements = [];
foreach ($this->partners as $partner) {
$elements[] = $partner->logo;
}
shuffle($elements);
?>
<?php foreach ($elements as $i => $element): ?>
<div class="myclass"><?= htmlspecialchars($element); ?></div>
<?php endforeach; ?>
Dass die UUID in ein <picture> umgewandelt werden muss, das weiss ich soweit - nur versehe ich gerade nicht wo und wie ich das in das fertige Bild $elements[] bringe :o
-
für Nachleser hier mal eine Möglichkeit:
PHP-Code:
<?php
$elements = [];
foreach ($this->partners as $partner) {
$objFile = Contao\FilesModel::findByUuid($partner->logo);
$logoPath = $objFile->path;
$elements[] = $logoPath;
}
shuffle($elements);
?>
<?php foreach ($elements as $element): ?>
<div class="myclass"><img src="<?= htmlspecialchars($element); ?>"></div>
<?php endforeach; ?>
-
So, ich habe hier an diesem Projekt wieder ein wenig weitergefeilt und muss gestehen, dass ich anstehe.
Einseits am Verständnis und andererseits an der Umsetzungsidee :(
obiges template tut das was es soll: es zeigt zufällige Reihenfolge der Bilder im Frontend an.
Nachdem ich aber nun ein wenig mehr haben möchte, komme ich nicht mehr weiter.
Ziel:
• Die Metadaten aus der Dateiverwaltung auslesen und verwenden »
- Verlinkung
- ALTernativer Text
• aus dem rsce_randomimage_config.html5 Daten/Werte mit übernehmen »
- z.B. target = new window
Verlinkung und ALT-Text aus der Dateiverwaltung kann ich mir hiermit rausholen:
Code:
foreach ($this->partners as $partner) {
$objFile = Contao\FilesModel::findByUuid($partner->logo);
$logoPath = $objFile->path;
$logoInfo = deserialize($objFile->meta);
$logoTitle = $logoInfo['de']['title'];
$logoLink = $logoInfo['de']['link'];
}
ja, aber wie bringe ich diese in $elements bzw. hole diese wieder passend zum Datensatz wieder heraus?
Und hier stehe ich nun echt auf der Leitung und würde mich um Hilfestellung freuen
Das vorhandene template rsce_randomimage.html5 sieht so aus:
PHP-Code:
<?php
$elements = [];
foreach ($this->partners as $partner) {
$objFile = Contao\FilesModel::findByUuid($partner->logo);
$logoPath = $objFile->path;
$logoInfo = deserialize($objFile->meta);
$logoTitle = $logoInfo['de']['title'];
$logoLink = $logoInfo['de']['link'];
$elements[] = $logoPath;
}
shuffle($elements);
?>
<?php foreach ($elements as $element): ?>
<div class="mod_article column is-one-quarter-tablet is-one-third-mobile is-2-desktop block">
<div class="ce_image block">
<figure class="image_container">
<a href="<?= HIER SOLLTE $logoLink REIN ?>" title="<?= HIER SOLLTE $logoTitle REIN ?>"<?php if ($partner->target): echo ' target="_blank"'; endif; ?>>
<img src="<?= htmlspecialchars($element); ?>">
</a>
</figure>
</div>
</div>
<?php endforeach; ?>
<?php if ($partner->target): echo ' target="_blank"'; endif; ?> klappt natürlich auch nicht ...
Oder ist mein Ansatz sowieso falsch? :eek:
-
so funktioniert das mal ... aber gibt's denn ne elegantere Lösung dafür?
PHP-Code:
<?php
$elements = [];
foreach ($this->partners as $partner) {
$objFile = Contao\FilesModel::findByUuid($partner->logo);
$logoPath = $objFile->path;
$logoInfo = deserialize($objFile->meta);
$logoTitle = $logoInfo['de']['title'];
$logoLink = $logoInfo['de']['link'];
$logoTarget = $partner->target;
$elements[] = [$logoPath, $logoTitle, $logoLink, $logoTarget];
}
shuffle($elements);
?>
<?php foreach ($elements as $element): ?>
<div class="mod_article column is-one-quarter-tablet is-one-third-mobile is-2-desktop block">
<div class="ce_image block">
<figure class="image_container">
<a href="<?= $element[2] ?>" title="<?= $element[1] ?>"<?php if ($element[3] == 1): echo ' target="_blank"'; endif; ?>>
<img src="<?= $element[0] ?>">
</a>
</figure>
</div>
</div>
<?php endforeach; ?>