Magento 2: рдмрд╛рд╣реНрдп рд╕реНрддреНрд░реЛрддрд╛рдВрдХрдбреВрди рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдпрд╛рдд рдХрд░рдгреЗ

Magento рдПрдХ рдИ-рдХреЙрдорд░реНрд╕ рдЙрдкрд╛рдп рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗ. рд╡реЗрдЕрд░рд╣рд╛рдКрд╕рд┐рдВрдЧ, рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рдХрд┐рдВрд╡рд╛ рд╡рд┐рдХреНрд░реАрд╕реЛрдмрдд рдЖрд░реНрдерд┐рдХ рд▓реЗрдЦрд╛рдЬреЛрдЦрд╛ рдпрд╛рдкреЗрдХреНрд╖рд╛ рдЙрддреНрдкрд╛рджрдиреЗ рд╡рд┐рдХрдгреЗ рд╣реЗ рдЕрдзрд┐рдХ рдЙрджреНрджрд┐рд╖реНрдЯ рдЖрд╣реЗ. рдЗрддрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, ERP рд╕рд┐рд╕реНрдЯреАрдо) рд╕реЛрдмрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЖрд╣реЗрдд. рдореНрд╣рдгреВрди, рдмрд▒реНрдпрд╛рдЪрджрд╛ рдореЕрдЬреЗрдиреНрдЯреЛ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕рд░рд╛рд╡рд╛рдд рдпрд╛ рдЗрддрд░ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рд╕реНрдЯреЛрдЕрд░ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдЙрджреНрднрд╡рддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 1C).

рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░, рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддреАрдордзреНрдпреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХрдореА рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:

  • рдХреЕрдЯрд▓реЙрдЧ (рдЙрддреНрдкрд╛рджрдиреЗ, рд╢реНрд░реЗрдгреА);
  • рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ (рд╡реЗрдЕрд░рд╣рд╛рдКрд╕ рдЖрдгрд┐ рдХрд┐рдВрдорддреАрдВрдордзреАрд▓ рдЙрддреНрдкрд╛рджрди рд╢рд┐рд▓реНрд▓рдХ);
  • рдЧреНрд░рд╛рд╣рдХ;
  • рдЖрджреЗрд╢;

Magento рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рдбреЗрдЯрд╛ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪрд╛ рдПрдХ рд╡реЗрдЧрд│рд╛ рд╡рд░реНрдЧ рдСрдлрд░ рдХрд░рддреЛ - рднрд╛рдВрдбрд╛рд░. рдореЕрдЬреЗрдВрдЯреЛрдЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдореБрд│реЗ, рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬрджреНрд╡рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдЬреЛрдбрдгреЗ рдХреЛрдб рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рд╣рд│реВ рд╣рд│реВ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд╛рд╢рдирд╛рдд, рдореА рд░реЗрдкреЛ рдХреНрд▓рд╛рд╕реЗрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди - "рдХреНрд▓рд╛рд╕рд┐рдХ" рдорд╛рд░реНрдЧрд╛рдиреЗ Magento 2 рдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░реЕрдореЕрдЯрд┐рдХрд░рд┐рддреНрдпрд╛ рдЙрддреНрдкрд╛рджрди рдЬреЛрдбрдгреНрдпрд╛рдЪреНрдпрд╛ рдореБрдЦреНрдп рдЯрдкреНрдкреНрдпрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЛ.

рдЧреНрд░рд╛рд╣рдХ рдЖрдгрд┐ рдСрд░реНрдбрд░ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рджреБрд╕рд▒реНрдпрд╛ рджрд┐рд╢реЗрдиреЗ - Magento рдкрд╛рд╕реВрди рдмрд╛рд╣реНрдп ERP рд╕рд┐рд╕реНрдЯреАрдордкрд░реНрдпрдВрдд рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдореНрд╣рдгреВрди, рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдореЕрдЬреЗрдиреНрдЯреЛ рдмрд╛рдЬреВрд▓рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдирдВрддрд░ тАЬрдЖрдордЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдЧреЛрд│реНрдпрд╛ рдирд┐рдШрд╛рд▓реНрдпрд╛".

рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдбреЗрдЯрд╛ рд░реЗрдХреЙрд░реНрдб рдХрд░рдгреНрдпрд╛рдЪреА рддрддреНрддреНрд╡реЗ

рдпрд╛ рдХреНрд╖рдгреА, Magento рдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЕрдЯрд┐рдХ рдкрджреНрдзрддреАрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдЬрддрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░рдгреЗ рдпрд╛рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдХрд╛рд░рдЦрд╛рдирд╛:

function __construct (MagentoCmsModelBlockFactory $blockFactory) {
    $this->blockFactory = $blockFactory;
}

/** @var MagentoCmsModelBlock $block */
$block = $this->blockFactory->create();

рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░ рд▓реЗрдЦрди рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рднрд╛рдВрдбрд╛рд░:

function __construct (MagentoCmsApiBlockRepositoryInterface $blockRepo) {
    $this->blockRepo = $blockRepo;
}

$this->blockRepo->save($block);

Magento 2 рдбреЛрдореЗрдирдордзреАрд▓ рд╕рд░реНрд╡ рдкреНрд░рдореБрдЦ рдореЙрдбреЗрд▓реНрд╕рд╕рд╛рдареА "рдлреЕрдХреНрдЯрд░реА" рдЖрдгрд┐ "рд░реЗрдкреЙрдЬрд┐рдЯрд░реА" рджреГрд╖реНрдЯрд┐рдХреЛрди рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

рдореВрд▓рднреВрдд рдЙрддреНрдкрд╛рджрди рдорд╛рд╣рд┐рддреА

рдореА Magento 2.3 рдЖрд╡реГрддреНрддреАрд╢реА рдЬреБрд│рдгрд╛рд░реА рдбреЗрдЯрд╛ рд░рдЪрдирд╛ рдкрд╛рд╣рдд рдЖрд╣реЗ. рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рд╕рд░реНрд╡рд╛рдд рдореВрд▓рднреВрдд рдорд╛рд╣рд┐рддреА рдЯреЗрдмрд▓рдордзреНрдпреЗ рдЖрд╣реЗ catalog_product_entity (рдЙрддреНрдкрд╛рджрди рдиреЛрдВрджрдгреА):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

рдореА рдПрдХрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЙрддреНрдкрд╛рджрдирд╛рдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдЖрд╣реЗ (type_id='simple'), рдбреАрдлреЙрд▓реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрдЪрд╛ рд╕рдВрдЪ (attribute_set_id=4) рдЖрдгрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдВрдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░рд╛ has_options ╨╕ required_options. рдЧреБрдгрдзрд░реНрдо рдкрд╛рд╕реВрди entity_id, created_at ╨╕ updated_at рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдирдВрддрд░, рдирд╡реАрди рдЙрддреНрдкрд╛рджрди рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ sku. рдореА рд╣реЗ рдХрд░рддреЛ:

/** @var MagentoCatalogApiDataProductInterfaceFactory $factProd */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogApiDataProductInterface $prod */
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$repoProd->save($prod);

рдЖрдгрд┐ рдорд▓рд╛ рдЕрдкрд╡рд╛рдж рдЖрд╣реЗ:

The "Product Name" attribute value is empty. Set the attribute and try again.

рдореА рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рдЙрддреНрдкрд╛рджрдирд╛рдЪреЗ рдирд╛рд╡ рдЬреЛрдбрддреЛ рдЖрдгрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЧрд╣рд╛рд│ рдЕрд╕рд▓реНрдпрд╛рдЪрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЛ Price. рдХрд┐рдВрдордд рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░, рдЙрддреНрдкрд╛рджрди рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рддреЗ:

$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$prod->setName($name);
$prod->setPrice($price);
$repoProd->save($prod);

рдЙрддреНрдкрд╛рджрдирд╛рдЪреЗ рдирд╛рд╡ рдЙрддреНрдкрд╛рджрди varchar рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд╛рд░рдгреАрдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ (catalog_product_entity_varchar), рдХрд┐рдВрдордд - рдЯреЗрдмрд▓рдордзреНрдпреЗ catalog_product_entity_decimal. рдЙрддреНрдкрд╛рджрди рдЬреЛрдбрдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд╛рд╕рдХреАрдп рд╕реНрдЯреЛрдЕрд░рдлреНрд░рдВрдЯ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд рд╣реЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╕реВрдЪрд┐рдд рдХрд░рдгреЗ рдЙрдЪрд┐рдд рдЖрд╣реЗ:

/** @var MagentoStoreModelStoreManagerInterface $manStore */
$manStore->setCurrentStore(0);

рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдгрдзрд░реНрдо

Magento рд╡рд╛рдкрд░реВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрддреНрдкрд╛рджрди рд╡рд┐рд╢реЗрд╖рддрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рдЖрдирдВрджрджрд╛рдпреА рдЖрд╣реЗ. рдореБрдЦреНрдп рдШрдЯрдХрд╛рдВрд╕рд╛рдареА EAV рдбреЗрдЯрд╛ рдореЙрдбреЗрд▓ (рдЯреЗрдмрд▓ рдкрд╣рд╛ eav_entity_type) рд╣реЗ рдпрд╛ рд╡реНрдпрд╛рд╕рдкреАрдард╛рдЪреНрдпрд╛ рдкреНрд░рдореБрдЦ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдлрдХреНрдд рдЙрддреНрдкрд╛рджрди рдореЙрдбреЗрд▓рдордзреНрдпреЗ рдпреЛрдЧреНрдп рдЧреБрдгрдзрд░реНрдо рдЬреЛрдбрддреЛ:

$prodEntity->setData('description', $desc);
$prodEntity->setData('short_description', $desc_short);
// ╨╕╨╗╨╕
$prodEntity->setDescription($desc);
$prodEntity->setShortDescription($desc_short);

рдЖрдгрд┐ рд░реЗрдкреЛ рдСрдмреНрдЬреЗрдХреНрдЯрджреНрд╡рд╛рд░реЗ рдореЙрдбреЗрд▓ рд╕реЗрд╡реНрд╣ рдХрд░рддрд╛рдирд╛:

$repoProd->save($prod);

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓рдордзреНрдпреЗ рджреЗрдЦреАрд▓ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.

рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛

рд╕реЛрдкреНрдпрд╛ рднрд╛рд╖реЗрдд - рд╕реНрдЯреЙрдХрдордзреАрд▓ рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рд░рдХреНрдХрдо. Magento 2.3 рдордзреНрдпреЗ, рдбреЗрдЯрд╛рдмреЗрд╕рдордзреАрд▓ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдЬреЗ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлреЙрд░рдореЕрдЯрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд рд▓рдХреНрд╖рдгреАрдп рднрд┐рдиреНрди рдЖрдзреА рдЬреЗ рдШрдбрд▓реЗ рддреНрдпрд╛рд╡рд░реВрди. рддрдерд╛рдкрд┐, рдЙрддреНрдкрд╛рджрди рдореЙрдбреЗрд▓рджреНрд╡рд╛рд░реЗ рд╕реНрдЯреЙрдХрдордзреАрд▓ рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдорд╛рддреНрд░рд╛ рдЬреЛрдбрдгреЗ рдЗрддрд░ рдЧреБрдгрдзрд░реНрдо рдЬреЛрдбрдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрдареАрдг рдирд╛рд╣реА:

/** @var MagentoCatalogModelProduct $prodEntity */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
$inventory = [
    'is_in_stock' => true,
    'qty' => 1234
];
$prodEntity->setData('quantity_and_stock_status', $inventory);
$repoProd->save($prodEntity);

рдорд╛рдзреНрдпрдо

рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рд╕реНрдЯреЛрдЕрд░ (рдИ-рдХреЙрдорд░реНрд╕) рдордзреАрд▓ рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдореАрдбрд┐рдпрд╛ рд╕рдорд░реНрдерди рдЕрдВрддрд░реНрдЧрдд рд▓реЗрдЦрд╛ рдкреНрд░рдгрд╛рд▓реА (ERP) рдордзреАрд▓ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рди рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдореАрдбрд┐рдпрд╛ рд╕рдорд░реНрдердирд╛рдкреЗрдХреНрд╖рд╛ рднрд┐рдиреНрди рдЖрд╣реЗ. рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЙрддреНрдкрд╛рджрдирд╛рд╕ рд╕рдореЛрд░рд╛рд╕рдореЛрд░ рджрд░реНрд╢рд╡рд┐рдгреЗ рдЙрдЪрд┐рдд рдЖрд╣реЗ, рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рд╕рд╛рдорд╛рдиреНрдп рдХрд▓реНрдкрдирд╛ рджреЗрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдХрд┐рдорд╛рди рдкреНрд░рд╛рдердорд┐рдХ рдкреНрд░рддрд┐рдорд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдЕрдЧрджреА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ. case рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рддрд╛рдирд╛.

ре▓рдбрдорд┐рди рдкреЕрдирд▓рджреНрд╡рд╛рд░реЗ рдкреНрд░рддрд┐рдорд╛ рдЬреЛрдбрддрд╛рдирд╛, рдкреНрд░рддрд┐рдорд╛ рдкреНрд░рдердо рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬрддрди рдХреЗрд▓реА рдЬрд╛рддреЗ (./pub/media/tmp/catalog/product) рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рдЙрддреНрдкрд╛рджрди рдЬрддрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ рддреЗрд╡реНрд╣рд╛ рдореАрдбрд┐рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╣рд▓рд╡рд┐рд▓реЗ рдЬрд╛рддреЗ (./pub/media/catalog/product). рддрд╕реЗрдЪ, ре▓рдбрдорд┐рди рдкреЕрдирд▓рджреНрд╡рд╛рд░реЗ рдЬреЛрдбрд▓реНрдпрд╛рд╡рд░, рдЗрдореЗрдЬ рдЯреЕрдЧ рдХреЗрд▓реА рдЬрд╛рддреЗ image, small_image, thumbnail, swatch_image.

/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogModelProductGalleryCreateHandler $hndlGalleryCreate */
/* $imagePath = '/path/to/file.png';  $imagePathRelative = '/f/i/file.png' */
$imagePathRelative = $this->imagePlaceToTmpMedia($imagePath);
/* reload product with gallery data */
$product = $repoProd->get($sku);
/* add image to product's gallery */
$gallery['images'][] = [
    'file' => $imagePathRelative,
    'media_type' => 'image'
    'label' => ''
];
$product->setData('media_gallery', $gallery);
/* set usage areas */
$product->setData('image', $imagePathRelative);
$product->setData('small_image', $imagePathRelative);
$product->setData('thumbnail', $imagePathRelative);
$product->setData('swatch_image', $imagePathRelative);
/* create product's gallery */
$hndlGalleryCreate->execute($product);

рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рдореАрдбрд┐рдпрд╛ рдкреНрд░рдердо рдЙрддреНрдкрд╛рджрди рдЬрддрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЖрдгрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реАрдордзреВрди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░рдЪ рдЬреЛрдбрд▓рд╛ рдЬрд╛рддреЛ. рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ label рдЙрддреНрдкрд╛рджрди рдореАрдбрд┐рдпрд╛ рдЧреЕрд▓рд░реАрдордзреНрдпреЗ рдПрдВрдЯреНрд░реА рдЬреЛрдбрддрд╛рдирд╛ (рдЕрдиреНрдпрдерд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдкрд╡рд╛рдж рдорд┐рд│реЗрд▓ Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

рд╢реНрд░реЗрдгреНрдпрд╛

рдмрд▒реНрдпрд╛рдЪрджрд╛, рд╕реНрдЯреЛрдЕрд░рдЪреА рд╢реНрд░реЗрдгреА рд░рдЪрдирд╛ рдЖрдгрд┐ рдмреЕрдХрдПрдВрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рддреАрд▓ рдЙрддреНрдкрд╛рджрдирд╛рдВрдЪреА рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд▓рдХреНрд╖рдгреАрдп рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддреЗ. рддреНрдпрд╛рдордзреАрд▓ рд╢реНрд░реЗрдгреНрдпрд╛ рдЖрдгрд┐ рдЙрддреНрдкрд╛рджрдирд╛рдВрдмрджреНрджрд▓ рдбреЗрдЯрд╛ рд╕реНрдерд▓рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдзреЛрд░рдгреЗ рдЕрдиреЗрдХ рдШрдЯрдХрд╛рдВрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддрд╛рдд. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдореА рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдирд╛ рдЪрд┐рдХрдЯреВрди рдЖрд╣реЗ:

  • рдмреЕрдХрдПрдВрдб рдЖрдгрд┐ рд╕реНрдЯреЛрдЕрд░ рд╢реНрд░реЗрдгреАрдВрдЪреА рддреБрд▓рдирд╛ рдирд╛рд╡рд╛рдиреЗ рдХреЗрд▓реА рдЬрд╛рддреЗ;
  • рд╕реНрдЯреЛрдЕрд░рдордзреНрдпреЗ рдирд╕рд▓реЗрд▓реА рд╢реНрд░реЗрдгреА рдЖрдпрд╛рдд рдХреЗрд▓реА рдЕрд╕рд▓реНрдпрд╛рд╕, рддреА рдореВрд│ рд╢реНрд░реЗрдгреА рдЕрдВрддрд░реНрдЧрдд рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддреЗ (Default Category) рдЖрдгрд┐ рд╕реНрдЯреЛрдЕрд░ рдХреЕрдЯрд▓реЙрдЧрдордзреНрдпреЗ рддреНрдпрд╛рдЪреА рдкреБрдвреАрд▓ рд╕реНрдерд┐рддреА рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдЧреГрд╣реАрдд рдзрд░рд▓реА рдЬрд╛рддреЗ;
  • рдПрдЦрд╛рджреЗ рдЙрддреНрдкрд╛рджрди рд╕реНрдЯреЛрдЕрд░рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░рдЪ рд╢реНрд░реЗрдгреАрд▓рд╛ рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ (рдкреНрд░рдердо рдЖрдпрд╛рдд);

рд╢реНрд░реЗрдгреАрдмрджреНрджрд▓ рдореВрд▓рднреВрдд рдорд╛рд╣рд┐рддреА рдЯреЗрдмрд▓рдордзреНрдпреЗ рдЖрд╣реЗ catalog_category_entity (рд╢реНрд░реЗрдгреАрдВрдЪрд╛ рдХреЕрдЯрд▓реЙрдЧ). Magento рдордзреНрдпреЗ рд╢реНрд░реЗрдгреА рддрдпрд╛рд░ рдХрд░рдгреЗ:

/** @var MagentoCatalogApiDataCategoryInterfaceFactory $factCat */
/** @var MagentoCatalogApiCategoryRepositoryInterface $repoCat */
$cat = $factCat->create();
$cat->setName($name);
$cat->setIsActive(true);
$repoCat->save($cat);

рд╢реНрд░реЗрдгреА рдЖрдпрдбреА рдЖрдгрд┐ рдЙрддреНрдкрд╛рджрди SKU рд╡рд╛рдкрд░реВрди рдЙрддреНрдкрд╛рджрдирд╛рд╕ рд╢реНрд░реЗрдгреАрд╢реА рдЬреЛрдбрдгреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ:

/** @var MagentoCatalogModelCategoryProductLinkFactory $factCatProdLink */
/** @var MagentoCatalogApiCategoryLinkRepositoryInterface $repoCatLink */
$link = $factCatProdLink->create();
$link->setCategoryId($catMageId);
$link->setSku($prodSku);
$repoCatLink->save($link);

рдПрдХреВрдг

Magento 2 рдордзреНрдпреЗ рдкреНрд░реЛрдЧреНрд░реЕрдореЕрдЯрд┐рдХрд░рд┐рддреНрдпрд╛ рдЙрддреНрдкрд╛рджрди рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рд▓рд┐рд╣рд┐рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рдореА рд╡рд░ рд╕рд╛рдВрдЧрд┐рддрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреА рдбреЗрдореЛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд.flancer32/mage2_ext_demo_import" рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рдХрдиреНрд╕реЛрд▓ рдХрдорд╛рдВрдб рдЖрд╣реЗ fl32:import:prod, рдЬреЗ JSON рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реА рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдпрд╛рдд рдХрд░рддреЗ "./etc/data/products.json:

[
  {
    "sku": "...",
    "name": "...",
    "desc": "...",
    "desc_short": "...",
    "price": ...,
    "qty": ...,
    "categories": ["..."],
    "image_path": "..."
  }
]

рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареАрдЪреА рдЪрд┐рддреНрд░реЗ рдХреЕрдЯрд▓реЙрдЧрдордзреНрдпреЗ рдЖрд╣реЗрдд ./etc/data/img.

рдорд╛рдЭреНрдпрд╛ рд▓реЕрдкрдЯреЙрдкрд╡рд░ рд╣реА рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди 10 рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рд╕реБрдорд╛рд░реЗ 10 рд╕реЗрдХрдВрдж рдЖрд╣реЗ. рдЬрд░ рдЖрдкрдг рд╣реА рдХрд▓реНрдкрдирд╛ рдЖрдгрдЦреА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реА рддрд░, рдпрд╛ рдирд┐рд╖реНрдХрд░реНрд╖рд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ рдХреА рдкреНрд░рддрд┐ рддрд╛рд╕ рд╕реБрдорд╛рд░реЗ 3600 рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдпрд╛рдд рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд рдЖрдгрд┐ 100K рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдпрд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрдорд╛рд░реЗ 30 рддрд╛рд╕ рд▓рд╛рдЧреВ рд╢рдХрддрд╛рдд. рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рд▓реЕрдкрдЯреЙрдк рдмрджрд▓рдгреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рдереЛрдбреАрд╢реА рд╕рд╣рдЬрддреЗрдиреЗ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдХрджрд╛рдЪрд┐рдд рдЕрдиреЗрдХ рд╡реЗрд│рд╛. рдкрдг рдореЛрдареЗрдкрдгрд╛рдЪреНрдпрд╛ рдЖрджреЗрд╢рд╛рдиреЗ рдирд╛рд╣реА. рдХрджрд╛рдЪрд┐рдд рд╣рд╛ рд╡реЗрдЧ рдЖрдгрд┐ рд╕рдВрдердкрдгрд╛ рд╣реЗ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдЙрджрдпрд╛рдЪреЗ рдПрдХ рдХрд╛рд░рдг рдЖрд╣реЗ. magento/async-import.

рдЖрдпрд╛рддреАрдЪрд╛ рд╡реЗрдЧ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪрд╛ рдореВрд▓рдЧрд╛рдореА рдЙрдкрд╛рдп рдореНрд╣рдгрдЬреЗ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдереЗрдЯ рдкреНрд░рд╡реЗрд╢ рдЕрд╕реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдореЕрдЬреЗрдВрдЯреЛрдЪреНрдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рддрддреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░реНрд╡ "рдЧреБрдбреАрдЬ" рдЧрдорд╛рд╡рд▓реНрдпрд╛ рдЖрд╣реЗрдд - рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡рдХрд╛рд╣реА "рдкреНрд░рдЧрдд" рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рддрдерд╛рдкрд┐, рддреЛ рд╡рд╛рдЪрддреЛ рдЖрд╣реЗ. рдЬрд░ рддреЗ рдХрд╛рд░реНрдп рдХрд░рдд рдЕрд╕реЗрд▓ рддрд░, рдореА рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░ рдереЗрдЯ рд▓реЗрдЦрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрди.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛