(Mittlerweile ist es gelöst, siehe Update(s) weiter unten)

Ok, ich geb's auf.

Ich probiere nun seit Tagen, auf einer aus 4.7 aktualisierten TYPO3 6.2 Version von dem contentAdapter=1 weg zu kommen, um in den vollen Genuss der TYPO3 Frontend-Performance zu kommen und die Seite, bzw meine alten TypoScripte, zukunftssicher zu bekommen.

Wieder einmal stehe ich vor einem (TYPO3)rätsel, in dem eine auf den ersten Blick total simple Anforderung auch im x-ten Anlauf nicht funktionieren will.

Die Ausgangslage

Ich habe auf der der Root-Seite der Webseite einen normalen, vom Redakteur pflegbaren Content-Record vom Typ Image, in der Backend-Spalte mit der ID=1.

Ich möchte dieses Bild auch auf den Unterseiten verwenden und nutze es dazu, ein Header-Motiv auf der Seite darzustellen.

Mein bislang funktionierender TS-Code ist dieser:

temp.headerimg = COA
temp.headerimg {
  10 < styles.content.get
  10.select {
    where = colPos=1
    pidInList = {$home_dir}
    max = 1
  }  
  10.renderObj = COA
  10.renderObj {
      5 = IMAGE
      5 {
        file.import.field = image
        file.import = uploads/pics/ 
        stdWrap.typolink.parameter = {$home_dir}
      }
    }   
  }
}

wobei {$home_dir} eine per TS-Konstante gefüllte Variable mit der PID der "Home"-Seite der jeweiligen Webseite ist.

Das funktionierte in TYPO3 4.7 und funktioniert auch in TYPO3 6.2, solange der contentAdapter gesetzt ist.

Sobald ich den contentAdapter ausschalte, das IMAGE renderObj um file.treatIdAsReference=1 erweitere und das file.import=uploads/pics/ rausnehme, wird statt des erwarteten Header-Motivs ein Bild aus fileadmin/_migrated_ genommen, dessen ID in der sys_file_records-Tabelle die ID 1 hat. Äh, ja.

Ich habe mittlerweile so ziemlich alles an Tutorials und Manuals zu TYPO3 und FILES und References und so gelesen, aber ich habe keine funktionierende TypoScript-Anweisung zusammengebastelt bekommen, die dieses SUPEREINFACHE Usecase hinbekommt.

Ich glaube, ich bin einfach zu blöd für TYPO3 6.2 -- oder es hat irgendwas bei dem Update ausgerechnet dieser Seite zerhauen, und die File-Reference ist kaputt.
Glaube ich allerdings nicht, denn auch mit abgeschaltetem contentAdapter sind alle "normalen" Content-Records, die per styles.content.get "geholt" werden, richtig.
Es liegt also wohl doch an meiner Unfähigkeit, hier ein passendes TypoScript zu finden.

Nachdem der vermeindlich einfache Ansatz, nur dem IMAGE mitzuteilen, dass es doch bitte eine Referenz benutzt, nicht geklappt hat, war mein vorerst letzter Ansatz, das komplette renderObj statt IMAGE zu FILES zu machen -- aber auch das funktioniert nicht, obwohl nach meinen Debug-Ausgaben die UID für das Reference-Ding korrekt ankommt.

...
10.renderObj = FILES
10.renderObj {
    references {
        table = tt_content
        fieldName = image
        uid = uid
    }
    renderObj = IMAGE
    renderObj {
        file.import.data = file:current:uid
        file.treatIdAsReference=1        
        stdWrap.typolink.parameter = {$home_dir}
    }
}
...

Es wäre ausserordentlich großartig, wenn da vielleicht jemand mit mehr Durchblick mir mal einen Tip oder zwei geben könnte, danke. Wahrscheinlich ist es ein saudummer offensichtlicher Fehler, der mir da unterläuft, aber ich finde es einfach nicht. :-/

Update 7.4.15, 18:50h:

Gerade eben nach dem Runtertippen der Codes hatte ich die Eingebung, dass das mit dem renderObj im renderObj vielleicht keine so gute Idee ist und habe es auf ein cObject abgeändert:

...
10.cObject = FILES
10.cObject {
    references {
        table = tt_content
        fieldName = image
        uid = uid
    }
    renderObj = IMAGE
    renderObj {
        file.import.data = file:current:uid
        file.treatIdAsReference=1        
        stdWrap.typolink.parameter = {$home_dir}
    }
}
...

Nach der ersten Freude, dass das Headerbild weiterhin erscheint (mit der dopplelten renderObj Variante war gar kein Bild sichtbar), kam jedoch schnell die Ernüchterung nach Ausschalten des contentAdapters: Jetzt ist wieder das falsche Bild, wie oben beschrieben, zu sehen. :-(

Update - 7.4.15 22:30h

Ha. Ha!! Haaaa!!! Isch werd' verüggd, nu geehds!!!

temp.headerimg = COA
temp.headerimg {
  10 < styles.content.get
  10.select {
    where = colPos=1
    pidInList = {$home_dir}
    max = 1
  }
  10.renderObj = FILES
  10.renderObj {
    references {
      table = tt_content
      fieldName = image
      uid.data = uid
    }
    renderObj = IMAGE
    renderObj {
      file.import.data = file:current:publicUrl
      stdWrap.typolink.parameter = {$home_dir}
    }
  }
}

Das geht bestimmt noch etwas eleganter, aber zumindestens kommt jetzt endlich das richtige Bild im Frontend an - auch mit ausgeschaltetem contentAdapter. Danke an @benjaminkott, der mit seinem gist einige Lämpchen in meinem Oberstübchen angeknipst hat, sowie @faulancr, der beiläufig in einer dm erwähnte, dass das treadIdAsReference bei einem Content-Element doch gar kein Sinn machen würde. Danke!

So, und hier noch eine etwas verschlanktere Version des TypoScript-Codes:

temp.headerimg < styles.content.getLeft
temp.headerimg {
  select {
    pidInList = {$home_dir}
    max = 1
  }
  renderObj = FILES
  renderObj {
    references {
      table = tt_content
      fieldName = image
      uid.data = uid
    }
    renderObj = IMAGE
    renderObj {
      file.import.data = file:current:publicUrl
      stdWrap.typolink.parameter = {$home_dir}
    }
  }
}

Update 8.4.15, 10:10h:

Eben bekam ich noch einen Tip aus dem TYPO3 slack channel:

(…) please use
file.import.data = file:current:originalUid // file:current:uid
instead of
file.import.data = file:current:publicUrl
when working with images in typoscript
it is faster and will not break if you switch to remote/restricted storages
- Frans Saris

Ich habe das TS entsprechend abgeändert und tatsächlich funktioniert das. Also:

temp.headerimg < styles.content.getLeft
temp.headerimg {
  select {
    pidInList = {$home_dir}
    max = 1
  }
  renderObj = FILES
  renderObj {
    references {
      table = tt_content
      fieldName = image
      uid.data = uid
    }
    renderObj = IMAGE
    renderObj {
      file.import.data = file:current:originalUid // file:current:uid
      stdWrap.typolink.parameter = {$home_dir}
    }
  }
}

Ich schreibe den Start- und End-Typoscript-Code gleich nochmal in einem englischen Artikel zusammen, ohne die Prosa dazwischen. Und ja, oben genannten Use-Case könnte man auch und vielliecht sogar besser mit einem Bild im Page Media Feld abhandeln; allerdings ist ein Bild, was sich per "normalem" Content-Element vom Redaktuer pflegen lässt, für diesen erstmal einfacher, als über die Seiteneigenschaften -> Medien zum Bild zu gelangen.