Modifier (OXID)

Manchmal ist es notwendig die Daten im Makaira anzureichern. Dies wird durch Modifier realisiert.
Sie liegen in eigenen OXID-Modulen und sind PHP-Klassen, die \Makaira\Connect\Modifier erweitern.

Das Makaira Connect Modul stellt sehr einfach zu nutzende Events bereit um die Daten beim Import zu verändern und anzureichern.

Damit lassen sich zum Beispiel Werte für Filter anlegen, Content-Erweiterungen in den Felder ergänzen oder mehrere Felder konkatenieren - sämtliche Daten werden hier beachtet. Makaira sieht eine Namensgebung der neuen Felder vor, welche die richtige Typisierung der Feldes sicherstellt. Die richtige Typisierung ist notwendig damit das Feld mit dem gewünschten Wirkung genutzt werden kann. So bietet Makaira alle Grunddatentypen int, float, time, sowie mehere str -Typen die sich je nach Art des Textes besser eignen. Genaueres findet Sie unter: Typisierung im Makaira Index

Das Entfernen von Whitespaces im Artikel Titel soll uns hier als Beispiel dienen.
Die Methode apply() bekommt als Argument das zu verändernde Objekt übergeben.

<?php

namespace AwesomeShop\Makaira\Modifier\Product;

use Makaira\Connect\Modifier;
use Makaira\Connect\Type;
use Makaira\Connect\Type\Common\BaseProduct;

class TrimTitleModifier extends Modifier
{
    /**
     * Modify product and return modified product
     *
     * @param BaseProduct $product
     *
     * @return BaseProduct
     */
    public function apply(Type $product)
    {
        $product->title = trim($product->title);

        return $product;
    }
}

Wenn die Klasse erstellt wurde und vom Autoloader geladen werden kann, muss sie noch als Modifier registriert werden. Dies geschieht in der services.yaml im Wurzel-Verzeichnis Ihres OXID-Moduls. Diese Datei ist die Definition für den Dependency Injection Container von Symfony. Weitere Informationen hierzu finden Sie in der Symfony-Dokumentation und im OXID-Blog.

services:
  AwesomeShop\Makaira\Modifier\Product\TrimTitleModifier:
    tags:
      - { name: 'kernel.event_listener', event: 'makaira.importer.modifier.product', priority: -1, method: addModifier }

Das Event-Name makaira.importer.modifier.product markiert den Modifier als Artikel-Modifier. Für andere Dokument-Typen sind unterschiedliche Event-Namen verfügbar:

Event-Name Modifier für
makaira.importer.modifier.product Artikel
makaira.importer.modifier.variant Artikel-Varianten
makaira.importer.modifier.category Kategorien
makaira.importer.modifier.manufacturer Hersteller

Über Priority kann die Priorität des Modifiers angegeben werden. Diese beeinflusst die Ladereihenfolge der Modifier, wobei ein Modifier mit einem hohem Wert vor einem Modifier mit einem niedrigeren Wert geladen wird.

Die Funktion des Modifiers kann mithilfe von HTTP-Requests auf den Shop geprüft werden.
Siehe dazu: Signierte Requests mit Postman

 

Migration aus altem Connect

Wenn sie noch ein altes OXID-Connect-Modul auf Basis des marmalade :: Yamm Moduls besitzen, muss die Container Konfiguration (in der dic.php) migriert werden.

Die Container-Definition unseres Beispiels würde im veralteten OXID-Connect in etwa wie folgt aussehen.

<?php
$dic['awesome_shop.makaira.product_modifier.trim_title'] = static function () {
  return new \AwesomeShop\Makaira\Modifier\Product\TrimTitleModifier();
};
$dic->tag('awesome_shop.makaira.product_modifier.trim_title', 'makaira.importer.modifier.product', -1);

Diese muss in das Format der services.yaml umgeschrieben werden.