Zum Inhalt springen

IMAGE Objekt mit File aus der Datenbank

Erstellt am 14. Juni 2010 · 5 Antworten · letzte Antwort am 28. Juni 2010

Tags: Bilder, Frage

simonborn ·

Hallo.

Habe meine pages Tabelle um ein Feld erweitert ("image_file" ).

Jetzt funktioniert folgendes:

page_special.mood_pic = TEXT
page_special.mood_pic.field = image_file
page_special.mood_pic.wrap = <img src="fileadmin/images/_Mood_Bilder/Logo/|" />

So kann man im Seiten Tab "Erweitert" für jede Seite ein Bild hinterlegen.

Allerdings würde ich die Datei viel lieber aus der Datenbank lesen und an ein IMAGE Objekt übergeben, alle Versuche mit file.import bzw. file.data waren aber kläglich erfolglos.

Weiß jemand wie ich den Dateinamen aus der DB an das IMAGE Objekt übergeben kann? Wäre super.

Julian.​Hofmann ·

Hallo Simon.

Interessant wäre, welche Ansätze Du mit dem IMAGE-Objekt schon hattest. Denn vielleicht hat nur eine Kleinigkeit gefehlt. So Fangen wir nochmal ganz von vorne an 😉

Das IMAGE-Objekt (TSref IMAGE) hat die file-Eigenschaft, die wir zunächst brauchen, und diese wiederum ist vom Typ imgResource (TSref imgResource). Damit ist dann eigentlich alles zusammenpuzzlebar

page_special.mood_pic = IMAGE
page_special.mood_pic.file.import = uploads/pics
page_special.mood_pic.file.import.field = image
page_special.mood_pic.file.import.listNum = 0

Glaube, Du hast noch einen kleinen Denkfehler in der Arbeitsweise von TYPO3. TYPO3 verwendet in Inhaltselementen in der Regel keine Daten direkt aus dem fileadmin. Stattdessen werden ausgewählte Daten beim Speichern dann ins Verzeichnis upload (bzw. Unterverzeichnis) kopiert. Und dort sucht TYPO3 beim Rendern auch danach.

Viele Grüße
Julian

simonborn ·

Hi Julian,

danke für Deine Antwort (und das etwas weitere Ausholen).

Es funktionierte 1:1 mit dem Code, den Du gepostet hast, nicht. Du bezogst Dich ja auf "Inhaltselemente" - und das hier ist ja denk ich kein Inhaltselement - sondern wird via das "Erweitert" TAB von einer Extension hinzugefügt.

Da erinnerte ich mich, dass Extensions ihre eigenen Bildorder haben. Und voila, es klappt. Hier der Gewinner-Code (tx_roosnelsmoodpic ist der Name der Extension).

page_special.mood_pic = IMAGE
page_special.mood_pic.file.import = uploads/tx_roosnelsmoodpic/
page_special.mood_pic.file.import.field = tx_roosnelsmoodpic_logo_bg
page_special.mood_pic.file.import.listNum = 0

Wichtig war auch noch der abschliessende Slash hinter dem file.import = ...

Der Denkfehler mit den Verzeichnissen bestand tatsächlich 😉

Dank Deiner Antwort kann ich jetzt auch diese Objekte auch endlich mal raffen.

Vielen Dank nochmal und Liebe Grüße
Simon

P.S.: Mein letzter Code mit IMAGE war dieser hier:

#page_special.mood_pic = IMAGE
#page_special.mood_pic.file = images/_Mood_Bilder/Logo/Logo.png
#page_special.mood_pic.file.import.field = tx_roosnelsmoodpic_logo_bg

Hatte davor aber auch schon mal ziemlich genau das, was Du gepostet hast, aber es funktionierte nicht - möglicherweise wegen des Pfades...?? 🙂

simonborn ·

Frage:
Das funktioniert jetzt wie geschmiert, allerdings muss man das Bild auf jeder einzelnen Seite einpflegen.

Gibt es über TypoScript eine Möglichkeit, dass, wenn kein Bild eingetragen ist, das Bild der pid genommen wird?

Michaelh74 ·

Es wäre schon sehr sinnvoll zu erwähnen, dass Du dies über eine Extension versuchst zu lösen. Ohne das zu wissen, kann Dir natürlich keiner den richtigen Code posten.

Außerdem benötigst Du dafür überhaupt keine Extension. Das geht von Haus aus über Resources -> Datei. Dort kannst Du je Seite ein Bild hinterlegen.
Abfragen geht genau so wie von Julian beschrieben.

Gruß
Michael

simonborn ·

Hi Michael,

vielen Dank für deinen Kommentar und den Hinweis auf die Resources.

Hatte damit noch nicht gearbeitet und direkt geschlossen, dass eine Extension das beste wäre, muss allerdings auch 2 Bilder pro Seite hinterlegen und müsste dem Kd. dann auferlegen, die Reihenfolge der Bilder (Bild 1 für Logo-BG, Bild 2 für Mood-Bild) einzuhalten. Danke für den Hinweis auf jeden Fall.

Weißt Du, wie es dann möglich ist, wenn das DB-Feld der aktuellen Seite = NULL ist, das der pid zu nutzen? Weisst Du, ob das über .if geht? oder kann man das über eine Zuweisung im Stil von

....field = img // pid.img

machen?

Grüße
Simon