[TYPO3-german] Bilder je nach Erscheinungsbild für das Bild rendern

Birgit lists at berlin-typo3.de
Mon Jan 14 12:02:42 CET 2019


Hallo Heike,

1.

Löst es dein String-Problem, wenn du in Type.html

<f:render partial="Media/Type/Image" arguments="{file: file, dimensions: dimensions, data: data, settings: settings}" />

ersetzt mit:

<f:render partial="Media/Rendering/Image" arguments="{file: file, dimensions: dimensions, settings: settings, data:data}" />


2.

Prüfe zuerst, ob die Bildgröße per CSS gesetzt wird. Alles, was du im Fluid-Template als Bildgröße setzt, wird dann außer Kraft gesetzt und mit CSS überschrieben.


3.

Image.html:

<f:media class="image-embed-item" file="{file}" width="{dimensions.width}" height="{dimensions.height}" alt="{file.alternative}" title="{file.title}" />

{dimensions.width}, {dimensions.height} sind errechnete Werte, die sich aus der maxWidthinText (Typo3 Constants) der Anzahl der Spalten (tt_content-Element), deren Zwischenräumen  (Typo3 Constants) und und Rahmen um die Bilder  (Typo3 Constants) ergeben.

Programmiert ist das in:
typo3/sysext/frontend/Classes/Data-Processing/GalleryProcessor


Was genau in welcher Reihenfolge ausgewertet - und jeweils wieder überschrieben - wird, kannst du dort nachlesen.

Ich benutze die mitgelieferten TextPic-, Pic- und Media-Templates gar nicht, sondern baue mir für jeden Anwendungsfall passende Contentelemente.
Die meisten Redakteure sind damit überfordert,  sich aus den Standard-Templates selbst jeweils die passenden Varianten zusammenzustellen.


Die Möglichkeiten zur Bilddarstellung im Frontend sind vielfältig und verwirrend, wenn man die Historie nicht kennt.

Den Gallery-Prozessor brauchst du nicht, wenn du z.B. Bootstrap verwendest.
Dann kannst du in eigenen Templates/Partials mit Bootstrap Grids oder Cards arbeiten.


Wo gibst du die Bildgröße ein - und welche Eingaben willst du demzufolge auswerten?

3.1. In den TCA Feldern Bildbreite, Bildhöhe
dann kommen die Werte aus der Tabell tt_content und die Parameter heißen: {data.imagewidth}, {data.imageheight}

Media/Type/Image.html:

<f:media class="image-embed-item" file="{file}" width="{dimensions.width}" height="{dimensions.height}" alt="{file.alternative}" title="{file.title}" />

ersetzen mit:

<f:media class="image-embed-item" file="{file}" width="{data.imagewidth}" height="{data.imageheight}" alt="{file.alternative}" title="{file.title}" />

Dabei können die Bilder allerding verzerrt werden, wenn die Ausgangsgröße nicht das entsprechende Seitenverhältnis hat.
Deswegen nur entweder Höhe oder Breite angeben.



3.2. Beschnitt-Varianten des einzelnen Bilder (Bild zuschneiden) berücksichtigen

Dann greift die Crop Variante für das einzelne Bild. Hier treten keine Verzerrungen auf, weil eine Kopie der Bilddatei angelegt und tatsächlich beschnitten und skaliert wird.

Ich habe es nicht geprüft, aber vermutlich wird im Gallery-Prozessor dann die Crop-Variante einberechnet in die Anzahl der Spalten usw.

Wenn du die Cropvariante und die im Backend definierte Breite übernehmen willst:

<f:media class="image-embed-item" file="{file}" width="{data.imagewidth}" cropVariant="default" alt="{file.alternative}" title="{file.title}" />

Oder eben feste Breiten oder Maximalbreiten passend zum Layout eingeben.



VG Birgit





> Am 14.01.2019 um 09:51 schrieb Heike Herzog-Kuhnke <hhk at kuhnke-owl.de>:
> 
> Ach fast vergessen neben dem Problem mit der Klasse, mit dem ich fast leben könnte, wenn es sein muss, habe ich das etwas nervigere Problem, dass typo3 die im Backend eingegebene Größe für das Bild völlig ignoriert.
> 
> Das wäre toll, wenn ich das hinbekommen könnte, weil diese Funktionalität ja durchaus sinnvoll ist.
> 
> LG
> Heike
> 
> Am 14.01.19 um 08:00 schrieb Heike Herzog-Kuhnke:
>> Danke Euch beiden.
>> Ich schaue, dass ich da heute noch mal dran gehe.
>> Entschuldigung für die falsche und irreführende Formulierung.
>> Das ist das erste Mal, dass ich mit Fluid arbeite und für mich Neuland.
>> Ich melde mich :)
>> LG
>> Heike
>> Am 13.01.19 um 22:04 schrieb _doc:
>>> Hallo Heike,
>>> 
>>> Dein gebautes Switch-Konstrukt ist nicht XML- bzw. HTML-valide.
>>> 
>>> Besser ware eine Inline-Notation.
>>> 
>>> <div class="{f:if(condition:'{data.layout}<=1 || {data.layout}>3',then:'col-md-push-5', else:'')}{f:if(condition:'{data.layout}<=2',then:'col-md-push-7', else:'')}{f:if(condition:'{data.layout}==3',then:'col-md-push-7', else:'col-lg-4')}">
>>> 
>>> ...
>>> </div>
>>> 
>>> Noch übersichtlicher wäre eine eigene Section, die du mit den jeweils gewünschten Parameter im Switch direkt im f:render notierst und zur Section durchreichst. Das geht zwar auf die Performance, ist aber insgesamt übersichtlicher. Vielleicht kannst du bei diesem Refactoring dann auch den Fehler ausmerzen.
>>> 
>>> Mit besten Grüßen
>>> 
>>>    Dieter Porth
>>> 
>>> P.S. Dein abgebildeter Code ist eine Fluid-Template und keine TypoScript.
>>> 
>>> Am 13.01.2019 um 08:46 schrieb Heike Herzog-Kuhnke:
>>>> Liebe Liste,
>>>> 
>>>> weil es so gut geklappt hat, hätte ich noch eine Frage. Nicht dass es schlimm wäre, dass meine Bilder alle in Kreisform angezeigt werden, aber irgendwie war das anders geplant...
>>>> 
>>>> Ich habe für meine Seite das Problem gehabt, dass ich die Bilder je nach Erscheinungsbild unterschiedlich darstellen muss. Dafür habe ich das Fluid-Element TextPic verwendet, was für die Div-Klassen auch wunderbar funktioniert.
>>>> 
>>>> Jetzt sollen aber eigentlich für das Layout Teaser (Layout 3) die Bilder mit einer Klasse "img-circle" versehen werden, die dafür sorgt, dass die Bilder rund dargestellt werden. Zusätzlich sollten diese Bilder eigentlich auf das Format 140 x 140 Pixel zugeschnitten werden (bzw. verkleinert.
>>>> 
>>>> Mit beiden Aufgaben komme ich nicht weiter. Eine Angabe der Bildgröße im Backend scheint leider keine Auswirkung mehr auf meine Bilder zu haben und ich bekomme es nicht hin, dass ich je nach Layout eine andere Klasse zum Bild dazu spiele.
>>>> 
>>>> Hier mein Typoskript:
>>>> 
>>>> ----------------------------
>>>> TextPic.html
>>>> ----------------------------
>>>> <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
>>>> <f:layout name="Default" />
>>>> <f:section name="Header">
>>>>     <f:if condition="{gallery.rows}">
>>>>         <f:switch expression="{data.layout}">
>>>>          <f:case value="1"><div class="col-md-7 col-md-push-5"> </f:case>
>>>>          <f:case value="2"><div class="col-md-7"></f:case>
>>>>          <f:case value="3"><div class="col-lg-4"></f:case>
>>>>          <f:defaultCase><div class="col-md-7 col-md-push-5"></f:defaultCase>
>>>>        </f:switch>
>>>> 
>>>>       <f:if condition="{data.layout} == 3">
>>>>               <f:render partial="Media/Gallery" arguments="{_all}" />
>>>>       </f:if>
>>>> 
>>>>       <f:if condition="{gallery.position.noWrap} != 1">
>>>>             <f:render partial="Header/Header" arguments="{
>>>>                 header: data.header,
>>>>                 layout: data.header_layout,
>>>>                 positionClass: 'featurette-heading',
>>>>                 default: settings.defaultHeaderType}" />
>>>>      </f:if>
>>>> 
>>>>     </f:if>
>>>> </f:section>
>>>> 
>>>> <f:section name="Main">
>>>> 
>>>>         <f:if condition="{data.bodytext}">
>>>> 
>>>>             <f:then>
>>>>                     <f:if condition="{gallery.position.noWrap}">
>>>>                       <f:render partial="Header/Header" arguments="{
>>>>                           header: data.header,
>>>>                           layout: data.header_layout,
>>>>                           positionClass: 'featurette-heading',
>>>>                           default: settings.defaultHeaderType}" />
>>>>                     </f:if>
>>>> <f:format.html>{data.bodytext}</f:format.html>
>>>>                     <f:if condition="{data.layout} != 3">
>>>>                       </div>
>>>>                     </f:if>
>>>> 
>>>>             </f:then>
>>>>             <f:else>
>>>>                 <f:if condition="{gallery.position.noWrap}">
>>>>                     <f:if condition="{data.header}">
>>>>                     <f:render partial="Header/Header" arguments="{
>>>>                         header: data.header,
>>>>                         layout: data.header_layout,
>>>>                         positionClass: 'featurette-heading',
>>>>                         default: settings.defaultHeaderType}" />
>>>>                         </div>
>>>>                     </f:if>
>>>>                 </f:if>
>>>>             </f:else>
>>>>         </f:if>
>>>>       <f:if condition="{data.layout} != 3">
>>>>               <f:render partial="Media/Gallery" arguments="{_all}" />
>>>>         </div>
>>>>       </f:if>
>>>>       <f:if condition="{data.layout} == 3">
>>>>             <f:render partial="Header/SubHeader" arguments="{
>>>>                 subheader: data.subheader,
>>>>                 layout: data.header_layout,
>>>>                 positionClass: 'btn btn-default',
>>>>                 link: data.header_link,
>>>>                 default: settings.defaultHeaderType}" />
>>>>            </div>
>>>>       </f:if>
>>>> 
>>>> 
>>>> </f:section>
>>>> </html>
>>>> 
>>>> ---------------------------
>>>> Media/Gallery.html
>>>> --------------------------
>>>> 
>>>> <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/FluidStyledContent/ViewHelpers" data-namespace-typo3-fluid="true">
>>>> <f:if condition="{gallery.rows}">
>>>>   <f:switch expression="{data.layout}">
>>>>    <f:case value="1"><div class="col-md-5 col-md-pull-7"> </f:case>
>>>>    <f:case value="2"><div class="col-md-5"></f:case>
>>>>    <f:case value="3"></f:case>
>>>>    <f:defaultCase></f:defaultCase>
>>>> </f:switch>
>>>> 
>>>>         <f:for each="{gallery.rows}" as="row">
>>>>                 <f:for each="{row.columns}" as="column">
>>>>                     <f:if condition="{column.media}">
>>>>                             <f:render partial="Media/Type" arguments="{file: column.media, dimensions: column.dimensions, data: data, settings: settings}" />
>>>>                     </f:if>
>>>>                 </f:for>
>>>>         </f:for>
>>>>         <f:if condition="{gallery.position.horizontal} == 'center'">
>>>>         </f:if>
>>>>   <f:switch expression="{data.layout}">
>>>>    <f:case value="1"></div></f:case>
>>>>    <f:case value="2"></div></f:case>
>>>>    <f:case value="3"></f:case>
>>>>    <f:defaultCase></f:defaultCase>
>>>> </f:switch>
>>>> 
>>>> </f:if>
>>>> </html>
>>>> 
>>>> ---------------------------
>>>> 
>>>> Hier klappt alles wunderbar mit den Switches.
>>>> 
>>>> ---------------------------
>>>> Media/Type/Image.html
>>>> ---------------------------
>>>> <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" xmlns:ce="http://typo3.org/ns/TYPO3/CMS/FluidStyledContent/ViewHelpers" data-namespace-typo3-fluid="true">
>>>> <figure class="image">
>>>>     <f:if condition="{file.link}">
>>>>         <f:then>
>>>>             <f:link.typolink parameter="{file.link}" title="{file.title}">
>>>>                 <f:render partial="Media/Rendering/Image" arguments="{file: file, dimensions: dimensions, settings: settings}" />
>>>>             </f:link.typolink>
>>>>         </f:then>
>>>>         <f:else>
>>>>             <f:if condition="{data.image_zoom}">
>>>>                 <f:then>
>>>>                     <ce:link.clickEnlarge image="{file}" configuration="{settings.media.popup}">
>>>>                         <f:render partial="Media/Rendering/Image" arguments="{file: file, dimensions: dimansions, settings: settings}" />
>>>>                     </ce:link.clickEnlarge>
>>>>                 </f:then>
>>>>                 <f:else>
>>>>                     <f:render partial="Media/Rendering/Image" arguments="{file: file, dimensions: dimensions, settings: settings}" />
>>>>                 </f:else>
>>>>             </f:if>
>>>>         </f:else>
>>>>     </f:if>
>>>>     <f:if condition="{file.description}">
>>>>         <figcaption class="image-caption">
>>>>             {file.description}
>>>>         </figcaption>
>>>>     </f:if>
>>>> </figure>
>>>> </html>
>>>> 
>>>> ------------------------------
>>>> 
>>>> 
>>>> ----------------------
>>>> Media/Rendering/Image.html
>>>> ------------------------
>>>> <html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
>>>> <f:media class="img-circle {f:if(condition: '{data.layout} != 3', then: 'featurette-image img-responsive center-block')}" file="{file}" width="{dimensions.width}" height="{dimensions.height}" alt="{file.alternative}" title="{file.title}" />
>>>> 
>>>> </html>
>>>> ---------------------------
>>>> 
>>>> Immer wenn ich hier um img-circle herum einer Condition eingebe, um je nach Layout die passende Klasse auszugeben, dann bleibt class leer. Mit dieser Variante wird die Klasse im alternativen Layout hinzugefügt, aber es scheint als müsste ich mindestens eine Klasse angeben.
>>>> 
>>>> Der Versuch es mit diesem switch zu lösen, wie in Gallery.html bringt in dieser Variante ein Oops:
>>>> 
>>>> ---------------------------
>>>> <f:if condition="{gallery.rows}">
>>>>   <f:switch expression="{data.layout}">
>>>>    <f:case value="1">
>>>>     <f:media class="featurette-image img-responsive center-block" file="{file}" alt="{file.alternative}" title="{file.title}" />
>>>>     </f:case>
>>>>    <f:case value="2">
>>>>     <f:media class="featurette-image img-responsive center-block" file="{file}" alt="{file.alternative}" title="{file.title}" />
>>>>     </f:case>
>>>>    <f:case value="3">
>>>>      <f:media class="img-circle" file="{file}" alt="{file.alternative}" title="{file.title}" />
>>>>     </f:case>
>>>>    <f:defaultCase>
>>>>       <f:media class="featurette-image img-responsive center-block" file="{file}" alt="{file.alternative}" title="{file.title}" />
>>>>     </f:defaultCase>
>>>> </f:switch>
>>>> ---------------------------
>>>> 
>>>> Nicht dass es schlimm ist, wenn alle Bilder der Homepage in rund angezeigt werden, wenns nicht anders geht, dann kann ich damit leben. Dass ich aber irgendwie die Option verloren habe im Backend die Größe zu manipulieren ärgert mich schon. Dass ich nicht verstehe, wie ich es richtig mache oder wo mein Fehler mit den Klassen ist, ärgert mich natürlich auch, nachdem der Rest so gut funktioniert hat.
>>>> 
>>>> Ich wäre sehr dankbar, wenn mir hier auch noch auf die Sprünge geholfen werden könnte :)
>>>> 
>>>> LG
>>>> Heike
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> TYPO3-german mailing list
>>>> TYPO3-german at lists.typo3.org
>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>> 
> 
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



More information about the TYPO3-german mailing list