codefit / ecommerce-xml
XML feed generator for various e-commerce platforms
1.0.0
2025-05-22 02:07 UTC
Requires
- php: ^8.1
- illuminate/support: ^10.0
- spatie/array-to-xml: ^3.0
Requires (Dev)
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
Tento balíček umožňuje generovat XML feedy pro různé služby (Google, Heureka, Zbozi) s podporou validace a dynamického nastavení parametrů.
Instalace
composer require codefit/ecommerce-xml
Použití
Google Feed
use Feeds\XmlGenerator\Feed\Google; use Feeds\XmlGenerator\Entities\GoogleItem; use Feeds\XmlGenerator\Exceptions\ValidationException; try { $feed = new Google([ 'namespace' => 'http://www.w3.org/2005/Atom', 'root_element' => 'feed' ]); // Nastavení autora, linku a title $feed->setAuthor('Codefit Webdesign'); $feed->setLink('https://www.codefit.cz/'); $feed->setTitle('Produkty'); // Vzorová data produktů $products = [ [ 'id' => '12345', 'title' => 'iPhone 13 Pro', 'description' => 'Nejnovější iPhone s výkonným čipem A15 Bionic', 'link' => 'https://example.com/iphone-13-pro', 'image_link' => 'https://example.com/images/iphone-13-pro.jpg', 'price' => '34990', 'brand' => 'Apple', 'gtin' => '1234567890123', 'mpn' => 'IP13P256', 'google_product_category' => 'Electronics > Phones & Accessories > Mobile Phones' ] ]; // Přidání produktů do feedu foreach ($products as $productData) { $item = new GoogleItem(); $item->setId($productData['id']) ->setTitle($productData['title']) ->setDescription($productData['description']) ->setLink($productData['link']) ->setImageLink($productData['image_link']) ->setPriceVat($productData['price']) ->setBrand($productData['brand']) ->setGtin($productData['gtin']) ->setMpn($productData['mpn']) ->setGoogleProductCategory($productData['google_product_category']); $feed->addItem($item->toArray()); $feed->addAvailability('in stock'); $feed->addCondition('new'); $feed->addShipping('CZ', 'Standard', 99.00); $feed->addShipping('CZ', 'Express', 149.00); $feed->addTax('CZ', '21', true); } // Generování a uložení feedu $feed->save('google.xml'); } catch (ValidationException $e) { echo "Chyba při generování Google feedu: " . $e->getMessage() . "\n"; }
Heureka Feed
use Feeds\XmlGenerator\Feed\Heureka; use Feeds\XmlGenerator\Entities\HeurekaItem; use Feeds\XmlGenerator\Enums\HeurekaDeliveryMethod; use Feeds\XmlGenerator\Exceptions\ValidationException; try { $feed = new Heureka([ 'namespace' => 'http://www.heureka.cz/ns/offer/1.0', 'root_element' => 'SHOP', 'country' => 'cz' ]); // Vzorová data produktů $products = [ [ 'itemId' => '12345', 'productName' => 'iPhone 13 Pro', 'product' => 'Apple iPhone 13 Pro 256GB', 'description' => 'Nejnovější iPhone s výkonným čipem A15 Bionic', 'categoryText' => 'Elektronika | Mobilní telefony | Apple', 'ean' => '1234567890123', 'productNo' => 'IP13P256', 'manufacturer' => 'Apple', 'url' => 'https://example.com/iphone-13-pro', 'deliveryDate' => 0, 'imgUrl' => 'https://example.com/images/iphone-13-pro.jpg', 'priceVat' => 34990.00 ] ]; // Přidání produktů do feedu foreach ($products as $productData) { $item = new HeurekaItem(); $item->setItemId($productData['itemId']) ->setProductName($productData['productName']) ->setProduct($productData['product']) ->setDescription($productData['description']) ->setCategoryText($productData['categoryText']) ->setEan($productData['ean']) ->setProductNo($productData['productNo']) ->setManufacturer($productData['manufacturer']) ->setUrl($productData['url']) ->setDeliveryDate($productData['deliveryDate']) ->setImgUrl($productData['imgUrl']) ->setPriceVat($productData['priceVat']); $feed->addItem($item->toArray()); $feed->addParameter('barva', 'Grafit'); $feed->addParameter('kapacita', '256 GB'); $feed->addDelivery(HeurekaDeliveryMethod::DPD, 99.0); $feed->addDelivery(HeurekaDeliveryMethod::PPL, 89.0); $feed->addGift('Obal zdarma'); $feed->addWarranty('Rozšířená záruka', 36); } // Generování a uložení feedu $feed->save('heureka.xml'); } catch (ValidationException $e) { echo "Chyba při generování Heureka feedu: " . $e->getMessage() . "\n"; }
Zbozi Feed
use Feeds\XmlGenerator\Feed\Zbozi; use Feeds\XmlGenerator\Entities\ZboziItem; use Feeds\XmlGenerator\Enums\ZboziDeliveryMethod; use Feeds\XmlGenerator\Exceptions\ValidationException; try { $feed = new Zbozi([ 'namespace' => 'http://www.zbozi.cz/ns/offer/1.0', 'root_element' => 'SHOP' ]); // Vzorová data produktů $products = [ [ 'itemId' => '12345', 'productName' => 'iPhone 13 Pro', 'product' => 'Apple iPhone 13 Pro 256GB', 'description' => 'Nejnovější iPhone s výkonným čipem A15 Bionic', 'categoryText' => 'Elektronika | Mobilní telefony | Apple', 'ean' => '1234567890123', 'productNo' => 'IP13P256', 'manufacturer' => 'Apple', 'url' => 'https://example.com/iphone-13-pro', 'deliveryDate' => 0, 'imgUrl' => 'https://example.com/images/iphone-13-pro.jpg', 'priceVat' => 34990.0, 'maxCpc' => 5.80, 'maxCpcSearch' => 4.50 ] ]; // Přidání produktů do feedu foreach ($products as $productData) { $item = new ZboziItem(); $item->setItemId($productData['itemId']) ->setProductName($productData['productName']) ->setProduct($productData['product']) ->setDescription($productData['description']) ->setCategoryText($productData['categoryText']) ->setEan($productData['ean']) ->setProductNo($productData['productNo']) ->setManufacturer($productData['manufacturer']) ->setUrl($productData['url']) ->setDeliveryDate($productData['deliveryDate']) ->setImgUrl($productData['imgUrl']) ->setPriceVat($productData['priceVat']) ->setMaxCpc($productData['maxCpc']) ->setMaxCpcSearch($productData['maxCpcSearch']); $feed->addItem($item->toArray()); $feed->addParameter('barva', 'Grafit'); $feed->addParameter('kapacita', '256 GB'); $feed->addDelivery(ZboziDeliveryMethod::DPD, 99.0); $feed->addDelivery(ZboziDeliveryMethod::PPL, 89.0); $feed->addExtraMessage('free_gift', 'Obal zdarma'); $feed->addExtraMessage('extended_warranty', 'Rozšířená záruka 3 roky'); } // Generování a uložení feedu $feed->save('zbozi.xml'); } catch (ValidationException $e) { echo "Chyba při generování Zbozi feedu: " . $e->getMessage() . "\n"; }
Entity
GoogleItem
Vlastnost | Typ | Popis |
---|---|---|
id | string | Unikátní identifikátor produktu |
title | string | Název produktu |
description | string | Popis produktu |
link | string | URL produktu |
image_link | string | URL obrázku produktu |
priceVat | float | Cena s DPH |
brand | string | Značka produktu |
gtin | string | GTIN (EAN) kód |
mpn | string | Výrobní číslo |
google_product_category | string | Kategorie produktu v Google |
HeurekaItem
Vlastnost | Typ | Popis |
---|---|---|
itemId | string | Unikátní identifikátor produktu |
productName | string | Název produktu |
product | string | Plný název produktu |
description | string | Popis produktu |
categoryText | string | Kategorie produktu |
ean | string | EAN kód |
productNo | string | Výrobní číslo |
manufacturer | string | Výrobce |
url | string | URL produktu |
deliveryDate | int | Počet dní do dodání (0 = skladem) |
imgUrl | string | URL obrázku produktu |
priceVat | float | Cena s DPH |
parameters | array | Parametry produktu |
delivery | array | Možnosti dopravy |
gifts | array | Dárky k produktu |
warranties | array | Záruky |
ZboziItem
Vlastnost | Typ | Popis |
---|---|---|
itemId | string | Unikátní identifikátor produktu |
productName | string | Název produktu |
product | string | Plný název produktu |
description | string | Popis produktu |
categoryText | string | Kategorie produktu |
ean | string | EAN kód |
productNo | string | Výrobní číslo |
manufacturer | string | Výrobce |
url | string | URL produktu |
deliveryDate | int | Počet dní do dodání (0 = skladem) |
imgUrl | string | URL obrázku produktu |
priceVat | float | Cena s DPH |
maxCpc | float | Maximální CPC pro obsahovou síť |
maxCpcSearch | float | Maximální CPC pro vyhledávání |
parameters | array | Parametry produktu |
delivery | array | Možnosti dopravy |
extraMessages | array | Extra zprávy |
Enums
HeurekaDeliveryMethod
PPL
: PPLDPD
: DPDDPD_PICKUP
: DPD výdejní místoCPOST
: Česká poštaCPOST_PICKUP
: Česká pošta výdejní místoGEIS
: GeisGEIS_PICKUP
: Geis výdejní místoGLS
: GLSGLS_PICKUP
: GLS výdejní místoINTIME
: IntimeINTIME_PICKUP
: Intime výdejní místoPOST
: PoštaPOST_PICKUP
: Pošta výdejní místoSLOVAKIA_POST
: Slovenská poštaSLOVAKIA_POST_PICKUP
: Slovenská pošta výdejní místoTOPTRANS
: ToptransTOPTRANS_PICKUP
: Toptrans výdejní místoULOZENKA
: UloženkaULOZENKA_PICKUP
: Uloženka výdejní místoZASILKOVNA
: ZásilkovnaZASILKOVNA_PICKUP
: Zásilkovna výdejní místo
ZboziDeliveryMethod
PPL
: PPLDPD
: DPDDPD_PICKUP
: DPD výdejní místoCPOST
: Česká poštaCPOST_PICKUP
: Česká pošta výdejní místoGEIS
: GeisGEIS_PICKUP
: Geis výdejní místoGLS
: GLSGLS_PICKUP
: GLS výdejní místoINTIME
: IntimeINTIME_PICKUP
: Intime výdejní místoPOST
: PoštaPOST_PICKUP
: Pošta výdejní místoSLOVAKIA_POST
: Slovenská poštaSLOVAKIA_POST_PICKUP
: Slovenská pošta výdejní místoTOPTRANS
: ToptransTOPTRANS_PICKUP
: Toptrans výdejní místoULOZENKA
: UloženkaULOZENKA_PICKUP
: Uloženka výdejní místoZASILKOVNA
: ZásilkovnaZASILKOVNA_PICKUP
: Zásilkovna výdejní místo