DefaultImage Trait

use \Alvine\Application\Platform\Builder\DataSource\Commerce\Item\DefaultImage;

Das DefaultImage Trait erweitert das Produkt um Bilder. Die Bilder werden aus dem Verzeichnis /alvine/image/gfx/<iid> geladen und in das Verzeichnis /image/item/ abgelegt. Der Zielpfad wird in der Methode buildImageSubPath aufgebaut. Diese Methode muss überschrieben werden um den Pfad zu ändern.

Das Hauptbild wird über die Produkt Eigenschaft image.group.main.1.filename definiert.

Dataset

Die Schlüssel von jedem Bild sehen folgendermaßen aus:

Name Beschreibung Beispiel
raw RAW Daten 0xafffeff12e5ff123 ...
base64 Base64 Codiert "data:image/jpeg;base64/9j/4AAQSkZJRgABAQEAYABgAAD ...
mimetype der Mime Typ image/jpeg
bits Bits 8
height Breite 50
width Höhe 50
source URL image/item/50-50/10095/1550778069/messer-set.jpg

Die Bilder stehen über die beiden Schlüssel image und image-group zur Verfügung. In image sind alle Bilder als Collection verfügbar. Wohingegen in image eine Map mit Wertden definiert ist.

// ALle Bilder
$item['image']
// Bilder Gruppen
$item['image-group']

Methoden

buildImageSubPath

Diese Methode legt den Pfad für das auszuliefernde Bild fest.

protected function buildImageSubPath(\Alvine\IO\File\File $file, string $iid, string $identifier, string $width, string $height): string {
    return 'image/item/'.$width.'-'.$height.'/'.$iid.'/'.$identifier.'/';
}

$width und $height entsprechen der Dimmension des Bildes, Die $iid ist die eindeutige Produkt-ID. Der $identifier hält den md5-Hash des Original-Bildinhaltes.

Begründung für den Aufbau des Pfades

Höhe und Breite werden als erstes gesetzt, damit man eine gesamte Produktion von Bilder in einer Größe - die man nicht mehr verwendet - einfach löschen kann, ohne in jede iid gehen zu müssen. $identifier wird unterhalb der IID gesetz, damit man Bilder eines Produktes gezielt löschen kann.

getDefaultImageManipulation

Mit dieser Methode können die Bilder mit den entsprechenden Operationen angepasst werden

    /**
     * Bild manipulationen
     * 
     * @param \Alvine\Image\Image $image  Bild
     * @param \int                $width  Breite
     * @param \int                $height Höhe
     * 
     * @return \Alvine\Image\Image Bild
     */
    protected function getDefaultImageManipulation(\Alvine\Image\Image $image, $width, $height): \Alvine\Image\Image {
        $image->shrink($width, $height, \Alvine\Image\Operation\Shrink::CENTER);
        return $image;
    }

getStandardImageSizes

Mit dieser Methode wird definiert, in welchen Größen jedes Bild berechnet werden sollen

    /**
     * Gewünschte Standardgröße für die Bilderstellung
     * 
     * @return array<int,int>
     */
    protected function getStandardImageSizes(): array {
        return [
            [50, 50], /** Breite und Höhe */
            [200, 200],
            [450, 450],
            [500, 500],
        ];
    }

Beispiel

So kann das Image im HTML-Template angesprochen werden.

<img data-attributes="src dataset:image-group | 
                      index:200-200 | index:image1 | index:source ">