Item Datasource

Die Item Datasource holt die Daten aus der pb_item.
Es werden im Standard keine Einschränkungen gemacht. Es werden alle IIDs aus der Tabelle zurück geliefert.

Wür jede IID wird das Template aufgerufen.

Delta

Die Datasource kann auch nur IIDs zurück liefern die sich geändert haben.
Es werden Änderungen an folgenden Tabellen identifiziert um ein Produkt als geändert anzusehen:

Tabelle Beschreibung
pb_item Änderungen an der Hauptdatensatz
pb_item_properties Änderungen an den Eigenschaften
pb_item_text Änderungen an den Texten
pb_publishing Änderungen an den Veröffentlichungen
sh_price Änderungen am Preis

Datasource für den Kunden

Die Item Datasource, wird für jeden Kunden individuell zusammen gestellt.
Dafür wird eine neue Klasse angelegt die von \Alvine\Application\Platform\Builder\DataSource\Commerce\Item abgeleitet ist.
Die benötigten Daten werden mit trais eingebunden.
In diesem Beispiel werden Texte, Eigenschaften, Kategorien und Bilder dazu geladen.

<?php
/**
 * ALVINE
 * 
 * COPYRIGHT: All  title   and  proprietary  rights,  including  trade
 * secrets,   in   the   Software   and   any   copies thereof and the
 * accompanying  written   materials,   are  owned  by   schukai  GmbH
 * and  are  protected  by  German  copyright  laws,  other applicable
 * copyright   laws  and  international  treaty  provisions.
 * 
 * @category   Alvine Platform
 * @package    Alvine\Application\Platform
 * @author     schukai GmbH <[email protected]>
 * @copyright  2002 - 2019 schukai GmbH
 * @license    http://alvine.io/license/ Alvine Nutzungslizenz
 * @version    $Revision: 1511 $
 * @link       http://alvine.io/ alvine.io
 */
namespace Customisation\Builder\DataSource\Commerce;

/**
 * Item DataSource
 * 
 * @category   Alvine Platform
 * @package    Alvine\Application\Platform
 * @author     schukai GmbH <[email protected]>
 * @license    http://alvine.io/license/ Alvine Nutzungslizenz
 * @version    $Revision: 1511 $
 * @link       http://alvine.io/ alvine.io
 * @since      20190215
 */
class Item extends \Alvine\Application\Platform\Builder\DataSource\Commerce\Item {
    use \Alvine\Application\Platform\Bridge\Core\Property;
    use \Alvine\Application\Platform\Bridge\Persistence;
    use \Alvine\Application\Platform\Builder\DataSource\Commerce\Item\Properties;
    use \Alvine\Application\Platform\Builder\DataSource\Commerce\Item\Texts;
    use \Alvine\Application\Platform\Builder\DataSource\Commerce\Item\Categories;
    use \Alvine\Application\Platform\Builder\DataSource\Commerce\Item\DefaultImage;
}

Verwendung zum erstellen von HTML Dateien

Es müssen nicht für alle Änderungen an einem Produkt auch eine HTML Dateien erstellt werden.
Wenn ein Produkt zum Beispiel archiviert oder gesperrt wurde, muss das Produkt nicht neu gerendert werden, weil es möglicherweise nicht ausgeliefert wird.
Es kommt immer auf das Zusammenspiel der Indexierung an.
Daher ist es sinnvoll für jeden Anwendungsfall auch eine eigene Datasource anzulegen.
Diese dann von der Kunden Klasse ableiten \Customisation\Builder\DataSource\Commerce\Item.

Hier in diesem Beispiel werden nur Produkte vom Typ Sortiment , keine archivierten und nur aktive Produkte zurück geliefert.
Wenn Delta verwendet wird , greift diese Einschränkung dann noch zusätzlich.

class ItemForBuilder extends \Customisation\Builder\DataSource\Commerce\Item {

    protected function getWhere(\Alvine\Persistence\Relation\SQL\Where $where=null): ?\Alvine\Persistence\Relation\SQL\Where {
        if($where===null) {
            $where=new \Alvine\Persistence\Relation\SQL\Where();
        }
        $where->addFilter(new \Alvine\Persistence\Relation\Field\Varchar($this->model::TABLE, 'sys_archived'), '0');
        $where->addFilter(new \Alvine\Persistence\Relation\Field\Integer($this->model::TABLE, 'sys_sales_group'), 1);
        $where->addFilter(new \Alvine\Persistence\Relation\Field\Integer($this->model::TABLE, 'sys_sales_type'), 10);
        return parent::getWhere($where);
    }

}

Verwendung zum indexieren

Bein indexieren der Daten , sollen auch archivierte oder nicht mehr aktive Produkte neu indexiert werden.
Daher werden bei dieser Klasse keine Einschränkungen gemacht.
Man kann natürlich auch direkt die \Customisation\Builder\DataSource\Commerce\Item für das Indexieren verwenden da diese auch keine Einschränkungen macht.

class ItemForIndex extends \Customisation\Builder\DataSource\Commerce\Item {

    protected function getWhere(\Alvine\Persistence\Relation\SQL\Where $where=null): ?\Alvine\Persistence\Relation\SQL\Where {
        return parent::getWhere($where);
    }

}