overplex / yml-generator
YML (Yandex Market Language) file generator
v1.11.6
2022-04-17 22:09 UTC
Requires
- php: >=5.6.1
- ext-simplexml: *
- ext-xmlwriter: *
Requires (Dev)
- ext-dom: *
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.1
- escapestudios/symfony2-coding-standard: ^3.0
- friendsofphp/php-cs-fixer: ^2.3
- fzaninotto/faker: ^1.6
- phpcompatibility/php-compatibility: ^9.0
- phpunit/phpunit: ^5.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
About
YML (Yandex Market Language) generator. Uses standard XMLWriter for generating YML file. Not required any other library you just need PHP 5.5.0 or >= version.
Generator supports this offer types:
- OfferCustom (vendor.model)
- OfferBook (book)
- OfferAudiobook (audiobook)
- OfferArtistTitle (artist.title)
- OfferTour (tour)
- OfferEventTicket (event-ticket)
- OfferSimple (empty)
Installation
Run composer require
composer require overplex/yml-generator
Or add this to your composer.json file:
"require": { "overplex/yml-generator": "~1.11.6", }
Usage examples
<?php use Bukashk0zzz\YmlGenerator\Model\Offer\OfferParam; use Bukashk0zzz\YmlGenerator\Model\Offer\OfferSimple; use Bukashk0zzz\YmlGenerator\Model\Category; use Bukashk0zzz\YmlGenerator\Model\Currency; use Bukashk0zzz\YmlGenerator\Model\Delivery; use Bukashk0zzz\YmlGenerator\Model\ShopInfo; use Bukashk0zzz\YmlGenerator\Settings; use Bukashk0zzz\YmlGenerator\Generator; use Bukashk0zzz\YmlGenerator\Cdata; // Create second (unbuffered) connection to database (only for Yii 2) $unbufferedDb = new \yii\db\Connection([ 'dsn' => \Yii::$app->db->dsn, 'charset' => \Yii::$app->db->charset, 'username' => \Yii::$app->db->username, 'password' => \Yii::$app->db->password, 'tablePrefix' => \Yii::$app->db->tablePrefix, ]); $unbufferedDb->open(); $unbufferedDb->pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); // Writing header to yml.xml $yml = new Generator((new Settings()) ->setOutputFile('yml.xml') ->setEncoding('UTF-8') ); // Writing ShopInfo (https://yandex.ru/support/partnermarket/elements/shop.html) $yml->addShopInfo((new ShopInfo()) ->setName('BestShop') ->setCompany('Best online seller Inc.') ->setUrl('http://www.best.seller.com/') ); // Writing currencies (https://yandex.ru/support/partnermarket/elements/currencies.html) $yml->startCurrencies(); $yml->addCurrency((new Currency()) ->setId('USD') ->setRate(1) ); $yml->addCurrency((new Currency()) ->setId('RUR') ->setRate(1) ); $yml->finishBlock(); // Writing categories (https://yandex.ru/support/partnermarket/elements/categories.html) $yml->startCategories(); /** @var CategoryModel $category */ foreach ($this->getCategoriesQuery()->each(50, $unbufferedDb) as $category) { $item = new Category(); $item->setId($category->id); $item->setName($this->formatText($category->name)); if ($category->parent) { $item->setParentId($category->parent->id); } $yml->addCategory($item); gc_collect_cycles(); } $yml->finishBlock(); // Writing offers (https://yandex.ru/support/partnermarket/offers.html) $yml->startOffers(); /** @var ProductModel $product */ foreach ($this->getProductsQuery()->each(50, $unbufferedDb) as $product) { $offer = new OfferSimple(); $offer->setId($product->id); $offer->setUrl($product->getViewAbsoluteUrl()); $offer->setName($product->name); $offer->setPrice($product->getPrice()); $offer->setOldPrice($product->getOldPrice()); $offer->setAvailable($product->in_stock); $offer->setVendorCode($product->articul); $offer->setCurrencyId('RUR'); $offer->setCount($product->stock); $offer->setWeight($product->weight); $offer->setDimensions($product->depth, $product->width, $product->height); $offer->setDescription(new CData($this->formatDescription($product->text))); $offer->addPicture($product->getMainPhotoAbsoluteUrl()); if (!empty($manufacturer)) { $offer->addCustomElement('manufacturer', $manufacturer); } // Характеристики foreach ($product->properties as $value) { $offer->addParam((new OfferParam)->setName($value->property->name)->setValue($value->value)); } $yml->addOffer($offer); gc_collect_cycles(); } $yml->finishBlock(); // Optional writing deliveries (https://yandex.ru/support/partnermarket/elements/delivery-options.xml) $yml->startDeliveries(); $yml->addDelivery((new Delivery()) ->setCost(2) ->setDays(1) ->setOrderBefore(14) ); $yml->finishBlock(); $yml->finish(); $unbufferedDb->close();
OZON example
$yml = new Generator((new Settings()) ->setOutputFile('ozon.xml') ->setEncoding('UTF-8') ->hideDtd() ); $yml->startOffers(); $offer = new OfferSimple(); $offer->setId('articul'); $offer->setPrice(100); $offer->setOldPrice(150); $offer->setInStock(1000); $offer->hideAvailable(); $yml->addOffer($offer); $yml->finishBlock(); $yml->finish();
Copyright / License
See LICENSE