TYPO3 / FAL: Dateipfad auslesen und Inhalt einbinden mit FILE / FILES

Der File Abstraction Layer von TYPO3 ist geil. Allerdings hat sich durch die Referenzierung von Dateien auch im Typoscript vieles geändert. Die Zeit in denen IMAGE oder FILE Objekten, über ein „import“ oder „file“ ein fester Pfad zu Dateien gegeben werden konnte und als die Dateinamen noch direkt in „tt_content“ oder „pages“ standen sind leider vorbei.

Jetzt läuft alles über wilde Relationen zwischen den betroffenen Tabellen sowie sys_file und sys_file_reference.

In diesem Beispiel habe ich den Seiteneigenschaften (pages) ein FAL Feld zum Dateiupload bzw. zur Erstellung einer neuen Relation für eine Headinject Textdatei erweitert. Die Textdatei beinhaltet beispielsweise ein Script, welches direkt in eine Seite eingebunden werden soll – also der Inhalt der Datei.
Das Typoscript Objekt „FILE“ macht genau das was ich will, wenn ich ihm einen gottverdammten Pfad zur Textdatei gebe. Bei der Verwendung vom File Abstraction Layer wird allerdings kein Pfad zur Datei in die „pages“ Tabelle geschrieben und deshalb muss man den weg über das „FILES“ Objekt gehen oder man plagt sich mit sehr komplexen Abfragen via „CONTENT“.

Da die Eigenschaft „file“ von „FILE“ glücklicherweise über stdWrap Eigenschaften verfügt, lässt sich so über die getText Funktionen von „data“ der entsprechende Dateipfad innerhalb eines „FILES“ Objekt ermitteln.

Um letztendlich den Inhalt der Textdatei aus dem FAL in die Kopfdaten der Seite einzubinden, braucht man folgendes Typoscript.

page.headerData.555 = FILES
page.headerData.555 {
   references {
     table = pages
     uid.data = page:uid
     fieldName = headinject
   }

   # Aus gefundenen Dateien wird nun per renderObj ein FILE gemacht, welches bei einer Textdatei automatisch den Inhalt der Datei ausgibt
   renderObj = FILE
   renderObj {
     # Das current bei file ist bei getText nur im FILES Objekt verfügbar
     file.stdWrap.data = file:current:publicUrl
   }
}


UPDATE (7. November 2014)

Solltet ihr im Zusammenhang mit dem File Abstraction Layer bzw. sys_files_references Probleme bei lokalisierten Pages bekommen, schaut bitte in diesen Artikel!


Weiterführende Links:

Das FILE Objekt »
Das FILES Objekt »
getText von Data »

5 Kommentare

  • Pingback: TYPO3 / FAL: Pages Language Overlay und Media / FILES (Lokalisierungen) | Web Dev Log

  • Gerald Gräupner

    Hallo Paul,

    ich komme in dem Zusammenhang mit einem Problem nicht weiter (Typo3 V 6.2.15). Ich möchte aus einem Content Element mit colpos=2 den internen Dateipfad zum Image hernehmen, um damit die url für ein background image zu füttern. Das soll in die header Daten eingefügt werden. Dafür mache ich Folgendes:

      headerData {    references {      table = tt_content      uid.data = page:uid      fieldName = image    }    10 = TEXT    10.value {      renderObj = IMAGE      renderObj {        file.stdWrap.data = file:current:publicUrl      }    }    10.stdWrap.wrap =   <style type=“text/css“>body #main > header {background-image: url( | )}</style>

    Im Ergebnis steht dann allerdings ein leerer Dateipfad:

    <style type=“text/css“>body #main > header {background-image: url()}</style>

    Kannst Du mir sagen, was ich da falsch mache? Muss ich den FAL irgendwo erst aktivieren?

    Danke und Gruß

    Gerald

    • Hallo Gerald, probiers mal eher in diese Richtung:

      page.headerData.555 = FILES
      page.headerData.555 {
         references {
           table = tt_content
           uid.data = ### UID vom Inhaltselement ###
           fieldName = image
         }
      
         # Aus gefundenen Dateien wird nun per renderObj ein FILE gemacht, welches bei einer Textdatei automatisch den Inhalt der Datei ausgibt
         renderObj = TEXT
         renderObj {
           # Das current bei file ist bei getText nur im FILES Objekt verfügbar
           data = file:current:publicUrl
           wrap = <style type="text/css">body #main > header {background-image: url( | )};</style>
         }
      }
      Bitte beachte den Marker. Du musst die UID von einem Inhaltselement angeben.
      • Ich würde dir empfehlen das Hintergrundbild irgendwo in den Seiteneigenschaften zu hinterlegen statt in einem Inhaltselement.

  • Moin, kann man das auch irgendwie in ein packen?
    ich möchte da den absoluten Pfad des Bildes haben. Allerdings kommt das Bild aus dem Datensatz einer extbase-extension. Ist das iwi möglich?

Schreibe einen Kommentar zu Gerald Gräupner Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.