Erweitern / Anpassen

Unsere App bietet die Möglichkeit, den Export des Datenfeeds mit einem eigenen App zu erweitern und anzupassen. So lassen sich z. B. die Felder im Feed anpassen sowie Informationen aus Dritt-Apps (z. B. Rabatt Apps) im Datenfeed aussteuern.

Funktion anpassen

In der App findet sich bereits ein Export Subscriber welcher die Möglichkeiten zur Beeinflussung des Datenfeeds aufzeigt. Der Inhalt kann, updatesicher, in die eigene App übernommen und entsprechend angepasst werden. Der Subscriber findet sich in folgendem Pfad:

bstInstaShopping\Subscriber\Export.php

Code

<?php
/**
 * NOTICE OF LICENSE
 *
 * @copyright  Copyright (c) 14.01.2020 brainstation GbR
 * @author     Mike Becker<mike@brainstation.de>
 */
namespace bstInstaShopping\Subscriber;

use Enlight\Event\SubscriberInterface;
use Doctrine\DBAL\Query\QueryBuilder;

class Export implements SubscriberInterface
{
    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
//            'bstInstaShopping_ExportHandler_Filter_Select' => 'onFilterSelect',
//            'bstInstaShopping_ExportHandler_Filter_CategoryQuery' => 'onFilterCategoryQuery',
//            'bstInstaShopping_ExportHandler_Filter_CategoryData' => 'onFilterCategoryData',
//            'bstInstaShopping_ExportHandler_Filter_ProductQuery' => 'onFilterProductQuery',
//            'bstInstaShopping_ExportHandler_Filter_ProductsDataArray' => 'onFilterProductDataArray',
//            'bstInstaShopping_ExportHandler_Filter_CsvHeader' => 'onFilterCsvHeader',
//            'bstInstaShopping_ExportHandler_Filter_ProductsData' => 'onFilterProductsData',
        ];
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterSelect(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var string $select */
        $select = $args->getReturn();

        // select mods

        return $select;
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterCategoryQuery(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var QueryBuilder $queryOrigin */
        $queryOrigin = $args->getReturn();

        // query mods

        return $queryOrigin;
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterCategoryData(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var array $categories */
        $categories = $args->getReturn();

        // query mods

        return $categories;
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterProductQuery(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var QueryBuilder $queryOrigin */
        $queryOrigin = $args->getReturn();

        // query mods

        return $queryOrigin;
    }

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onFilterProductDataArray(\Enlight_Event_EventArgs $args)
{
    /** @var \bstInstaShopping\Components\ExportHandler $handler */
    $handler = $args->get('subject');

    /** @var array $productData */
    $productData = $args->getReturn();

    // productData mod

    return $productData;
}

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterCsvHeader(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var array $headers */
        $headers = $args->getReturn();

        // headers mod

        return $headers;
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterProductsData(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var array $products */
        $products = $args->getReturn();

        // products mod

        return $products;
    }
}

Einzelne Events im Überblick

Die Daten des Datenfeeds können mit 7 Events erweitert bzw. modifiziert werden.

bstInstaShopping_ExportHandler_Filter_Select

Dieses Event erlaubt Ihnen, den Select Part des Datenbank Queries anzupassen und so weitere Daten für den Datenfeed verfügbar zu machen. Im Standard können alle Felder der nachfolgenden Tabelle verwendet werden:

  • s_articles

  • s_articles_details

  • s_articles_categories_ro

  • s_categories

  • s_core_tax

  • s_articles_img

  • s_articles_prices

  • s_media

  • s_articles_supplier

Im folgenden Code Beispiel, erweitern wir den Query um ein weiteres Tabellenfeld feld1 aus der Datenbanktabelle drittanbieter_app_tabelle.

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onFilterSelect(\Enlight_Event_EventArgs $args)
{
    /** @var \bstInstaShopping\Components\ExportHandler $handler */
    $handler = $args->get('subject');

    /** @var string $select */
    $select = $args->getReturn();

    // select mods
    $select[] = 'drittanbieter_app_tabelle.feld1';

    return $select;
}

Wenn Sie ein Feld hinzufügen, welches nicht in den oben aufgeführten Datenbanktabellen enthalten ist, muss die neue Datenbanktabelle im Query mit angegeben werden. Dies passiert im Event bstInstaShopping_ExportHandler_Filter_ProductQuery

bstInstaShopping_ExportHandler_Filter_CategoryQuery

Der Kategorie Query ermittelt alle Kind-Kategorien der in den App Einstellungen ausgewählten Hauptkategorie. Eine Beeinflussung ist über dieses Event möglich.

bstInstaShopping_ExportHandler_Filter_CategoryData

Mit diesem Event, lassen sich die ermittelten Kategorien aus dem Kategorie Query als Array modifizieren und erweitern.

bstInstaShopping_ExportHandler_Filter_ProductQuery

Haben Sie den Select des Queries angepasst und verwenden darin ein Datenbankfeld welches nicht in der Liste oben aufgeführt ist z. B. von einer Drittanbieter App, muss die Datenbanktabelle ebenfalls hinzufügt werden. Das passiert in diesem Event.

Im folgenden Code Beispiel, erweitern wir den Query um eine weitere Tabelle drittanbieter_app_tabelle und verknüpfen diese mittels der Detail Id des Artikels.

/**
     * @param \Enlight_Event_EventArgs $args
     */
    public function onFilterProductQuery(\Enlight_Event_EventArgs $args)
    {
        /** @var \bstInstaShopping\Components\ExportHandler $handler */
        $handler = $args->get('subject');

        /** @var QueryBuilder $queryOrigin */
        $queryOrigin = $args->getReturn();

        // query mods
        $queryOrigin->leftJoin('article', 'drittanbieter_app_tabelle', 'xyz', 'xyz.articledetailsID = detail.id');

        return $queryOrigin;
    }

bstInstaShopping_ExportHandler_Filter_ProductsDataArray

Dieses Event kann zum Erweitern oder Modifizieren der Artikeldaten genutzt werden, welche über den Datenbank Query zurückgeliefert werden.

Im folgenden Beispiele erweitern wir den Daten Array um das neue Feld feld1, welches wir in den vorangegangenen Beispielen verwendet haben.

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onFilterProductDataArray(\Enlight_Event_EventArgs $args)
{
    /** @var \bstInstaShopping\Components\ExportHandler $handler */
    $handler = $args->get('subject');

    /** @var array $productData */
    $productData = $args->getReturn();

    // productData mod. Add feld1 at the end of the array
    $productData[] = $product['feld1']

    return $productData;
}

bstInstaShopping_ExportHandler_Filter_CsvHeader

Mit Hilfe dieses Events, können neue Spalten-Bezeichner/Felder/Header in die Datenfeed CSV einfügt werden.

Im folgenden Beispiele erweitern wir die Header Liste um das neue Feld feld1, welches wir in den vorangegangenen Beispielen verwendet haben.

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onFilterCsvHeader(\Enlight_Event_EventArgs $args)
{
    /** @var \bstInstaShopping\Components\ExportHandler $handler */
    $handler = $args->get('subject');

    /** @var array $headers */
    $headers = $args->getReturn();

    // headers mod
    $headers[] = 'feld1_titel';

    return $headers;
}

bstInstaShopping_ExportHandler_Filter_ProductsData

Dieses Event bietet Ihnen die Möglichkeit, die Produktdaten, direkt vor dem Einfügen in die Datenfeed CSV Datei zu modifizieren. Im Beispiel wird geprüft, ob in dem Feld, welches den Kategoriepfad bzw. die Breadcrumb enthält, das Wort special vorkommt. Ist das der Fall, wird als Kategoriepfad SALE ausgesteuert.

/**
 * @param \Enlight_Event_EventArgs $args
 */
public function onFilterProductsData(\Enlight_Event_EventArgs $args)
{
    /** @var \bstInstaShopping\Components\ExportHandler $handler */
    $handler = $args->get('subject');

    /** @var array $products */
    $products = $args->getReturn();

    // products mod
    foreach ($products as $orderNumber => $fields) {
        // if category path contains "specials" use SALE as Category Name
        if (strpos($fields[12], 'specials') !== false) {
            $fields[12] = 'SALE';
            $products[$orderNumber] = $fields;
        }
    }

    return $products;
}

Last updated