Zum Inhalt springen

tt_content.search bildausgabe mit FAL

Erstellt am 25. März 2015 · 8 Antworten · letzte Antwort am 28. April 2015

Tags: Inhaltselemente, Dateien & FAL, Frage

OnkelEdi ·

Hallo,

wahrscheinlich ist es garnicht schwer, aber ich hab ein kleines Problem mit der Ausgabe von Bildern über TS mit FAL.
Situation ist folgende:
Es geht um eine Mitarbeiterdarstellung. Die Mitarbeiter liegen in Form von tt_content Datensätzen vor.
Es soll auch nach Mitarbeiter gesucht werden können. Das ist mit der tt_content.search über Typoscript gelöst.
(ja ich weiß es gibt Addressdatensätze und gute Suchextensions, aber das soll halt so bleiben).
Das ganze hat bis jetzt auf typo3 4.5 gut geklappt und geht auch nach dem upgrade immer noch.
Nur das Bild wird natürlich auf Grund von FAL nicht mehr ausgegeben.
Folgender Code wurde für die Ausgabe des Bildes im tt_content searchresult verwendet:

tt_content.search.20.renderObj.30.20 = IMAGE
tt_content.search.20.renderObj.30.20{
  file.import = uploads/pics/
  file.import.field = tt_content_image
  maxW = 200
  wrap = <div class="image">|</div>
}

Ich weiß es gibt unzählige Anleitungen für die Ausgabe mit FAL (FILES statt IMAGE, threadItAsReference etc.), hat aber bis jetzt nix funktioniert, außerdem sind das fast alles nur Beispiele, die sich auf das Media-feld der Seite beziehen.

Kann mir vielleicht jemand weiterhelfen oder hat irgendwie einen Hinweis/Link?
typo3 version ist übrigens 6.2.10

Grüße
Eduard

Chrissli ·

Etwa so:

20 = FILES
20 {
  references {
    table = tt_content
    uid.data = field:uid
    # dummthin from here         
    fieldName = image            
  }          
  maxItems = 1
  renderObj = IMAGE
  renderObj {
    file.import.data = file:current:uid
    file.treatIdAsReference = 1
    altText.data = file:current:title
  }
}
OnkelEdi ·

Hi,

danke für die schnelle Antwort. Bekomme damit folgende Fehlermeldung:

Catchable Fatal Error: Argument 3 passed to TYPO3\CMS\Frontend\Page\PageRepository::getFileReferences() must be an array... usw

und noch so einige mehr 🙂

Wahrscheinlich ist das nur nicht die richtige Stelle in der tt_content search an der ich es anbringe.

Chrissli ·

Nur damit wir die gleiche Basis haben.
Der TS-Teil sollte nun so aussehen:

    tt_content.search.20.renderObj.30 = COA # das sollte ja ein COA sein, standard ist das ja nicht vorhanden
    ...
    tt_content.search.20.renderObj.30.20 = FILES
    tt_content.search.20.renderObj.30.20 {
        references {
            table = tt_content
            uid.data = field:uid         
            fieldName = image
        }        
        renderObj = IMAGE
        renderObj {
            file.import.data = file:current:uid
            file.treatIdAsReference = 1
            maxW = 200
            altText.data = file:current:title
            wrap = <div class="image">|</div>
        }
    }
OnkelEdi ·

Hallo,

ja, danke. Ich glaub das hat gepasst mit dem COA, hab ich wohl bloß nicht hingeschrieben.
Funktioniert aber trotzdem nicht.
Hier ist der ganze tt_content.search code. Falls du Lust hast ihn dir anzusehen. Vielleicht findest du einen Fehler. ...schön wärs jedenfalls 🙂

tt_content.stdWrap.innerWrap.cObject {
  244 = TEXT
  244.value = |
  244.stdWrap.dataWrap = <div class="mitarbeiter" id="c{field:uid}">|</div>
}


#Suchen
#suchbereich
tt_content.search.20.allowedCols = tt_content.header-bodytext-image





#eingabemaske
tt_content.search.30{
  target = _self
  badMess = Bitte das Feld ausfüllen
  
}

tt_content.search.30.dataArray.10 >
tt_content.search.30.dataArray.10 {
  label = Spezielle Suche <br />Bitte Namen eingeben
  type = *sword = input, 15, 30
}
#suchbutton
tt_content.search.30.dataArray.40.value.data >
tt_content.search.30.dataArray.40.value = suchen

tt_content.search.30.REQ.labelWrap.wrap >
tt_content.search.30.REQ.labelWrap.wrap =
tt_content.search.stdWrap >
tt_content.search.30.layout >
tt_content.search.30.layout  = <div class="li_bypass">###LABEL###&nbsp;</div><div class="li_bypass">###FIELD###</div>                                    


#Definition Suchbereich in db
tt_content.search.30.dataArray.20 >
tt_content.search.30.dataArray.20 {
  valueArray >
  type = scols = hidden
  value = tt_content.header
}
tt_content.search.30.dataArray.30 >
tt_content.search.30.dataArray.30 {
  type = stype= hidden
  value = 491
}

tt_content.search.30.wrap = <div class="staffSearch"> | </div>

#kein Datensatz
tt_content.search.20.noResultObj.10.data >
tt_content.search.20.noResultObj.10.value = Uuuups! diesen Mitarbeiter kennen wir nicht
tt_content.search.20.noResultObj.10.wrap >
tt_content.search.20.noResultObj.10.wrap = <h3> | </h3>
tt_content.search.20.noResultObj.20 = TEXT
tt_content.search.20.noResultObj.20{
  value = zurück zur Auswahl
  wrap = <p class="textp1"><a href="index.php?mitarbeiter"> | </a></p>
}

#gefundenes darstellen
tt_content.search.20.renderObj.10.typolink >
tt_content.search.20.renderObj.10.wrap >
tt_content.search.20.renderObj.10.field >
tt_content.search.20.renderObj.10.htmlSpecialChars >



tt_content.search.20.renderObj.10 = COA
tt_content.search.20.renderObj.10.10 = TEXT
tt_content.search.20.renderObj.10.10{
  field = tt_content_header
  stripHtml = 1
  htmlSpecialChar = 1
}
tt_content.search.20.renderObj.10.stdWrap{
  crop = 200 | ...
  wrap = <h3> | </h3>
}
tt_content.search.20.renderObj.10 >




tt_content.search.20.renderObj.20.stdWrap{
  crop = 200 | ...
  wrap = <h5> | </h5>                                                                   
}
tt_content.search.20.renderObj.20 >

tt_content.search.20.renderObj.30 = COA
tt_content.search.20.renderObj.30.10 = TEXT
tt_content.search.20.renderObj.30.10{
  field = tt_content_bodytext
  parseFunc < lib.parseFunc_RTE
  wrap = <div class="info"> | </div>
  #stripHtml = 1
  #htmlSpecialChar = 1
  #doNotStripHTML = 1
}

tt_content.search.20.renderObj.30.20 = FILES
tt_content.search.20.renderObj.30.20 {
  references {
    table = tt_content
    uid.data = field:uid
    fieldName = image
  }
  renderObj = IMAGE
  renderObj {
      file.import.data = file:current:uid
      file.treatIdAsReference = 1
      maxW = 200
    altText.data = file:current:title
    wrap = <div class="image">|</div>
  }
}









tt_content.search.20.layout{
  10 >
  20 >
  wrap = <div class="staffSearchResult mitarbeiter">###RESULT###</div>
}


[globalVar = TSFE:id = 501]
tt_content.search.25 = TEXT
tt_content.search.25.value = <a href="index.php?id=499" title="wieninger Mitarbeiter"> zurück zu Mitarbeiter </a>
[global]

tt_content.search.30{
  labelWrap.wrap =
  labelWrap.wrap >
  stdWrap.wrap >
  commentWrap.wrap >
  dataArray.40.type = submit=submit
}

#sectionframe für Mitarbeiterdarstellung
tt_content.stdWrap.innerWrap.cObject {
244 = TEXT
  244.value = |
  244.stdWrap.dataWrap = <div class="mitarbeiter" id="c{field:uid}">|</div>
}

Gruß
Eduard

Chrissli ·

Oh, da bin ich etwas überfragt.
Wenn ich mir die Definition der allowedCols oder auch bei der Ausgabe die Felddefinition "tt_content_bodytext" anschaue, ist hier ja irgendeine spezielle Logik im Hintergrund am Werk.
Möglich wäre z.b. das der Bezug tt_content zur File-Tabelle gar nicht aufgebaut wird/werden kann,
aber wie gesagt, blanke Theorie.
Der FILES-Teil sollte so eigentlich für's rendern funktionieren, ich habe das selbst so im Einsatz.
Sorry o.O

OnkelEdi ·

Hi,

ioa... ich hab das vom Vorgänger übernommen und nur ein wenig angepasst...
Soll halt nur Header, Bodytext und Bild ausgegeben werden. Kommt dann alles in ein div und fertig 🙂
Aber trotzdem danke 🙂

Gruß
Eduard

OnkelEdi ·

Hallöle,

habs jetzt noch mal mit deiner Methode probiert und bekomme folgenden Fehler:

#1: PHP Catchable Fatal Error: Argument 3 passed to TYPO3\CMS\Frontend\Page\PageRepository::getFileReferences() must be an array, null given, called in /html/typo3/typo3_src-6.2.10/typo3/sysext/frontend/Classes/ContentObject/FilesContentObject.php on line 321 and defined in /html/typo3/typo3_src-6.2.10/typo3/sysext/frontend/Classes/Page/PageRepository.php line 1357

Also tut sich was 🙂 irgendwie
Weißt du vielleicht was ich damit anfangen soll?

Gruß
Eduard

dwildt ·

Hallo Eduard,
herzlichen Dank für Euren Auftrag, den Fehler im TypoScript zu finden.

Die beiden wesentlichen Stellen sind folgende:
Siehe meine Kommentare im TypoScript-Schnipsel unten.

tt_content {
  search {
    20 {
        // Hier muss die uid enthalten sein, andernfalls steht diese im weiteren Verlauf nicht zur Verfügung.
      allowedCols = tt_content.uid-header-bodytext-image
      ...
      renderObj = COA
      renderObj {
        10 = TEXT
        10 {
          ...
        }
        20 = FILES
        20 {
          references {
            table = tt_content
            uid {
                // Hier muss tt_content_uid verwendet werden. Nur uid gibt die id der gefundenen Seite aus.
              field = tt_content_uid
            }
            fieldName = image
          }
          renderObj = IMAGE
          renderObj {
            file {
              import {
                data = file:current:originalUid // file:current:uid
              }
            }
          }
        }
      }
    }
  }
}

Viele Grüße
Dirk