Hntergrundgeschichte

 

Die Besucher der Website verwenden unterschiedliche Geräte und Bildschirmauflösungen. Jede Website hat einige Haltepunkte, um das beste Erlebnis für den Kunden zu schaffen. Die Layout-Richtlinien der Haltepunkte dienen dazu, den Inhalt an den verfügbaren Bildschirmplatz anzupassen.

Für jedes Bild, das auf der Website verwendet wird, muss der Content-Operator das gewünschte Format für jeden Haltepunkt manuell erstellen, was sehr zeitaufwendig ist. Hinzu kommt, dass einige Komponenten einer Website andere Bildformate verwenden als andere Komponenten. Ein Bild, das für eine Komponente erstellt und ausgeschnitten wurde, kann nicht für eine andere Komponente verwendet werden. Dies beeinträchtigt die Flexibilität des Inhaltserstellungsprozesses und führt zu einer spürbaren Fehlerquote.

In unserem Fall muss ein Content-Operator eine Anfrage für eine Reihe von Bildern, die zu einer bestimmten Komponente passen, per E-Mail senden, die Grafikabteilung erstellt dann die Bilder für Handy, Tablet, Desktop usw. Aufgrund von Missverständnissen und mangelnder Kenntnis der Komponentenanforderungen werden Fehler gemacht, was zu einem erhöhten Aufwand und Kosten für Anpassungen und Überarbeitungen führt.

Lösung - Responsive Imaging

 

Es wird nur ein Bild mit einer guten Auflösung benötigt, das in das Magnolia-DAM hochgeladen werden muss. Sobald der Content-Operator das Asset in eine Inhaltskomponente eingebettet hat, muss ein Fokusbereich des Bildes ausgewählt werden. Alle Bildderivate, die für jeden Breakpoint benötigt werden, werden on the fly erstellt, wobei der Fokuspunkt für jedes Bildderivat auf die Mitte des Bildes gesetzt wird. Dies bedeutet eine enorme Reduzierung der Komplexität des Bilderzeugungsprozesses. Auch die Fehlerzahl wird dauerhaft minimiert.

Für den Softwareentwickler ist die Einbettung denkbar einfach. Die Einstellung für die Bildableitungen wird nur einmal während des Layout-Prototyping-Prozesses erstellt. Die Bilddimension wird bei der Programmierung der Layout-Sourcecode-Fragmente verwendet.  

Die Position des Ausschnitts kann sich verschieben, wenn der Fokuspunkt in der Nähe des Randes liegt. Frontent-Entwickler sind sogar in der Lage, mit Bildern zu arbeiten, die Überläufe verwenden. Zur Verankerung des Bildes können Klassen verwendet werden. 

Embedding and Module Handling

Das Sizer-Modul ist eine Erweiterung des Magnolia Imaging-Moduls. Es fügt einen neuen Bildgenerator hinzu, der nach vorgegebenen Parametern beschnittene/verkleinerte Bilder erzeugt. Auf diese Weise können von einem Asset mehrere Varianten für verschiedene Haltepunkte wiedergegeben werden.  

Die Parameter werden über PathVariable bereitgestellt und unterstützen das Standard-Caching-Verhalten von Magnolia.

Breakdown: https://www.dev5310.com/.imaging/{generatorname:sizer}/{width}/{height}/{relativeXPos}-{relativeYPos}/{workspace}{jcr-path} 

Beispiel: https://www.dev5310.com/.imaging/sizer/767/250/38-49/dam/website/index/Stage-Tests/Hafenluft.JPG

Voraussetzungen

_Kompatibilität mit Magnolia CE and Magnolia EE 

_Minimum Version 5.7  

Maven Dependency

<dependency> 
    <groupId>com.dev5310</groupId> 
    <artifactId>sizer</artifactId> 
    <version>1.3</version> 
</dependency> 

<repository> 
    <id>dev5310</id> 
    <url>http://artifactory.dev5310.com:8081/artifactory/lib-release-public</url> 
</repository> 

Verwendung in Magnolia CMS Templating

Yaml Configuration: 

class: com.dev5310.magnolia.modules.sizer.field.ImagingFieldDefinition 

or: 

fieldType: sizerImageField 

Darüber hinaus muss die folgende Codezeile in der Komponentendefinition verwendet werden: 

modelClass: com.dev5310.magnolia.core.rendering.FieldRenderingModel 

Die Model-Klasse ist nicht erforderlich, wenn das SizerImageElement über die TemplatingFunctions geholt wird.

Minimal Dialog 

form: 
  label: Sizer Image Field 
  tabs: 
    - name: main 
      label: Main 
      fields: 
 
        - name: sizerImage 
          label: Sizer Image 
          fieldType: sizerImageField 
 
actions: 
  commit: 
    class: info.magnolia.ui.admincentral.dialog.action.SaveDialogActionDefinition 
  cancel: 
    class: info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition 

Templating Functions

Ab Version 1.3 werden TemplatingFunctions unter dem Namen „sizerfn“ installiert und verwendet.

${sizerfn.sizerImageElement(content, propertyName) 

... erstellt eine Instanz von SizerImageElement unter Verwendung der gewünschten ContentMap und der entsprechenden PropertyNames.

${(sizerfn.sizerImageElement(product, 'teaserImage') 
.breakpoint(1, 768, 552) 
.breakpoint(768, 992, 646) 
.breakpoint(992, 800, 632) 
.breakpoint(1400, 800, 632) 
.css('rotation-image') 
.render())!} 

In diesem Beispiel ist „product“ die ContentMap einer anderen Seite. Innerhalb dieser Seite wurde ein „sizerImageField“ mit dem Namen „teaserImage“ erstellt.

Durch die Verwendung der Templatig-Funktionen ist das SizerImage in jeder ContentMap aufrufbar, ohne dass ein FieldRenderingModel verwendet werden muss.