Zufälliges Bild aus Resourcen

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).

Links

Hinterlasse einen Kommentar.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.