bukashk0zzz/yml-generator

YML (Yandex Market Language) file generator

Maintainers

👁 Bukashk0zzz

Package info

github.com/Bukashk0zzz/YmlGenerator

pkg:composer/bukashk0zzz/yml-generator

Statistics

Installs: 194 799

Dependents: 0

Suggesters: 0

Stars: 115

Open Issues: 6

v2.1.0 2025-12-23 10:18 UTC

Requires

  • php: >=7.1
  • ext-simplexml: *
  • ext-xmlwriter: *

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 130fd0d4fc2fa969c4d3dd089907ad548cabf1ad

  • Denis Golubovskiy <bukashk0zzz.woop@gmail.com>

ymlyandexmarketyml-generator


README

👁 Code Coverage
👁 License
👁 Latest Stable Version
👁 Total Downloads

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:

Installation

Run composer require

composer require bukashk0zzz/yml-generator

Or add this to your composer.json file:

"require": {
	"bukashk0zzz/yml-generator": "dev-master",
}

Usage examples

<?php

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;

$file = tempnam(sys_get_temp_dir(), 'YMLGenerator');
$settings = (new Settings())
 ->setOutputFile($file)
 ->setEncoding('UTF-8')
;

// Creating ShopInfo object (https://yandex.ru/support/webmaster/goods-prices/technical-requirements.xml#shop)
$shopInfo = (new ShopInfo())
 ->setName('BestShop')
 ->setCompany('Best online seller Inc.')
 ->setUrl('http://www.best.seller.com/')
;

// Creating currencies array (https://yandex.ru/support/webmaster/goods-prices/technical-requirements.xml#currencies)
$currencies = [];
$currencies[] = (new Currency())
 ->setId('USD')
 ->setRate(1)
;

// Creating categories array (https://yandex.ru/support/webmaster/goods-prices/technical-requirements.xml#categories)
$categories = [];
$categories[] = (new Category())
 ->setId(1)
 ->setName($this->faker->name)
;

// Creating sets array
$categories = [];
$categories[] = (new Set())
 ->setId('s1')
 ->setName('Set name')
 ->setUrl('https://google.com')
;

// Creating offers array (https://yandex.ru/support/webmaster/goods-prices/technical-requirements.xml#offers)
$offers = [];
$offers[] = (new OfferSimple())
 ->setId(12346)
 ->setAvailable(true)
 ->setUrl('http://www.best.seller.com/product_page.php?pid=12348')
 ->setPrice($this->faker->numberBetween(1, 9999))
 ->setCurrencyId('USD')
 ->setCategoryId(1)
 ->setDelivery(false)
 ->setName('Best product ever')
;

// Optional creating deliveries array (https://yandex.ru/support/partnermarket/elements/delivery-options.xml)
$deliveries = [];
$deliveries[] = (new Delivery())
 ->setCost(2)
 ->setDays(1)
 ->setOrderBefore(14)
;

(new Generator($settings))->generate(
 $shopInfo,
 $currencies,
 $categories,
 $offers,
 $deliveries
);

Adding custom elements

if you need additional offers elements in your yml file using method addCustomElement('type','value'). For example:

$offers[] = (new OfferSimple())
 ->setId(12346)
 ->setAvailable(true)
 ->setUrl('http://www.best.seller.com/product_page.php?pid=12348')
 ->setPrice($this->faker->numberBetween(1, 9999))
 ->setCurrencyId('USD')
 ->setCategoryId(1)
 ->setDelivery(false)
 ->setName('Best product ever')
 ->addCustomElement('type', 'value')
;

Copyright / License

See LICENSE