Im TYPO3-Forum kam letzten die Frage nach einem zufälligem Bild aus dem Resourcen-Feld (media) einer bestimmten, festen Seite auf. Die Frage interessierte mich, gerade weils ich hier durch die Einführung von FAL Änderungen ergaben und viele Snippets aus dem Netz nicht (mehr) funktionieren.
Aus dem Ansatz des Threadautors entwickelt, ergab sich schließlich folgende Lösung:
temp.backImg = FILES
temp.backImg {
files.cObject = CONTENT
files.cObject {
table = sys_file_reference
select {
// Page-ID der Seite, aus der Bilder entnommen werden sollen
pidInList = 3
where = tablenames='pages' AND fieldname='media'
selectFields = uid_local
orderBy = rand()
max = 1
}
renderObj = TEXT
renderObj.field = uid_local
}
renderObj = IMAGE
renderObj {
file.import.data = file:current:publicUrl
}
}
Zunächst sieht das ganze etwas kompliziert aus. Es hat aber den Vorteil, dass mit diesem Ansatz wirklich sehr variable Lösungen möglich werden. So könnte statt auf die pages-Tabelle auch auf News-Datensätze, Produktdaten, Inhaltselemente odgl. zugegriffen werden, da die volle Breite der SQL-Abfrage bereitsteht.
Der einfachere Weg
Wenn man sich nicht zu sehr in Code schon reingedacht hat, und den Wald vor lauter Bäumen nicht mehr sieht, dann fällt einem sogar die einfachere Lösung ein (die letztens im Forum auch gesucht wurde):
temp.backImg = IMAGE
temp.backImg.file {
import.data = levelmedia: 0
import.listNum = rand
treatIdAsReference = 1
}
Zu beachten ist hierbei aber, dass das TypoScript-Objekt gecacht wird, d.h. der „Zufall“ auch gecacht wird. Wenn dies unerwünscht ist, dann müsste ein *_INT-Objekt außenherum.
Alternative wäre, mehrere Bilder in HTML einzubetten und via JS (und damit am Cache vorbei) den Zufall zu handhaben (d.h. Bilder ein-/auszublenden).