Hallo liebe Experten,
ich habe eine kurze Frage:
ich möchte ein zufälliges Bild in ein mit GIFBUILDER gestaltetes Hintergrundbild einladen. Dieses Bild liegt als Resource im jeweiligen Seiteninhalt. Da TypoScript offenbar keine Funktion für Zufallszahlen bereitstellt, wollte ich das über simpelstes PHP realisieren - will heißen ein PHP-Skript, was nur eine Zufallszahl zwischen 0 und 2 erzeugt (es sind immer 3 Bilder hinterlegt). Diesen Wert möchte ich dann als listNum übernehmen. Mein Ansatz war wie folgt: (wir befinden uns in einem GIFBUILDER)
(...)
20 = IMAGE
20.file = fileadmin/templates/images/background_test.jpg
20.file {
import = uploads/media/
import.listNum = PHP_SCRIPT_EXT
import.listNum {
file = fileadmin/rand.inc.php
}
import.field = media
}
...und das zugehörige PHP-Skript einfach:
<?php echo rand(0,2); ?>
Natürlich hat das nicht geklappt, wäre ja auch zu einfach gewesen 😉
Kann mir jemand von Euch erklären, wo mein Fehler steckt?
Vielen Dank und schöne Grüße,
tuedel
import.listNum ist vom Typ "stdWrap"
Was man damit anstellen kann findest du hier:
https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Stdwrap.html
Schau mal unter "postUserFunc" da gibts ein Beispiel was du anpassen könntest. Mit includeLibs.something = [Pfad zur PHP Datei] bindest du eine PHP-Datei ein.
Mit import.listNum.postUserFunc = user_zufall rufst du deine Funktion da drin auf (Achtung: Die muss "user_" vorne heissen!)
Viel Erfolg
PS: Natürlich nicht "echo" verwenden sondern return $content; oder so
Hm. Danke schonmal, aber da bin ich nicht wirklich schlau raus geworden. Ich habe folgendes gemacht:
Ganz zu Beginn des TypoScripts:
includeLibs.randomnumber = fileadmin/rand.inc.php
An der gewünschten Stelle:
20 = IMAGE
20.file = fileadmin/templates/images/background_test.jpg
20.file {
import = uploads/media/
import.field = media
import.listNum.postUserFunc = user_rand
}
Das PHP-Skript sieht wie folgt aus:
<?php
function user_rand() {
$content = rand(0,2);
return $content;
}
?>
Funktioniert allerdings erwartungsgemäß nicht. Ich habe postUserFunc aber irgendwie auch eher so verstanden, dass etwas AN das Skript übergeben wird, aber ich möchte es doch ABrufen, oder funktioniert das in beide Richtungen?
Google spuckt zu postUserFunc leider auch nichts aus, was mir weiterhelfen könnte. Hat jemand einen Tipp für mich?
Vielen Dank und Grüße,
tuedel
Also die Funktion bekommt mal wenigstens einen Parameter übergeben (ich galube aber 2)
Probier mal das:
<?php
function user_rand($content,$conf) {
echo "TEST";
$content = rand(0,2);
return $content;
}
?>
Wenn dir das wenigstens mal "TEST" rausschreibt dann wird deine Funktion auch aufgerufen.
Habe was wichtiges vergessen:
import.listNum.stdWrap.postUserFunc = user_rand
muss es natürlich heißen - Problem gelöst! 😉