Produkte Exportieren

Ein Produkt besteht aus mehreren Artikeln (Varianten).

Damit eine valide XML erstellt werden kann müssen zwei Klassen abgeleitet werden.
Die \Alvine\Channel\Tradebyte\Builder\AbstractProduct und die \Alvine\Channel\Tradebyte\Builder\AbstractArticle Klasse.
Alle Methoden darin müssen implementiert werden.

class productBuilder extends \Alvine\Channel\Tradebyte\Builder\AbstractProduct {
}

Der Builder benötigt ein Dataset in Form einer \Alvine\Types\Map um ein Produkt bauen zu können.
Die Struktur des Dataset ist frei definierbar, denn innerhalb der abstracten Methoden wird der Aufbau der Elemente programmiert.

Wichtig ist das das Dataset Informationen über die Varianten des Produktes enthält, wenn es in verschiebeben Größen und Farben verfügbar ist.

Die Methode getProduct() liefert das \Alvine\Channel\Tradebyte\Element\Product Objekt zurück. Diese Produkt XML wird dann in ein Verzeichnis abgelegt.
Das wird dann für jedes Produkt ausgeführt.

$map = new \Alvine\Types\Map();
$productBuilder = new productBuilder($map);

$xml = $productBuilder->getProduct();

$outputFile=new \Alvine\IO\File\File('/tmp/item_1.xml');
$outputStream = $outputFile->getOutputSteam();
$outputStream->write((string) $xml);

Um dann eine Finale XML an Tradebyte zu erstellen.
Werden alle Produkt XMLs in einer Datei zusammen gefasst.
Damit nicht alles im Speicher gehalten werden muss , werden die einzelnen Produkte nacheinander in eine XML gespeichert.

$header = '<?xml version="1.0" encoding="UTF-8"?>';
$header .= '<TBCATALOG version="1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://api.trade-server.net/schema/all_in_one/tbcat_1_2_import.xsd" >';
$header .= '<PRODUCTDATA type="full">';

$fileList=\Alvine\IO\File\FileList::getInstanceFromDirectory(new \Alvine\IO\File\Directory('/tmp/'));
$outputFile=new \Alvine\IO\File\File('tradebyte.xml');
$outputStream = $outputFile->getOutputSteam();

$outputStream->write($header);

foreach($fileList AS $file) {
    $inputStream=$file->getInputStream();
    $outputStream->write($inputStream->read());
    $inputStream->close();
}

footer = '</PRODUCTDATA>';
footer.= '</TBCATALOG>';

$outputStream->write($header);