рдореИрдЧреЗрдВрдЯреЛ 2: рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЙрддреНрдкрд╛рдж рдЖрдпрд╛рдд рдХрд░рдирд╛

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

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдПрдХреАрдХрд░рдг рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рддрдХ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рдХреИрдЯрд▓реЙрдЧ (рдЙрддреНрдкрд╛рдж, рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ);
  • рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдбреЗрдЯрд╛ (рдЧреЛрджрд╛рдореЛрдВ рдФрд░ рдХреАрдорддреЛрдВ рдореЗрдВ рдЙрддреНрдкрд╛рдж рд╕рдВрддреБрд▓рди);
  • рдЧреНрд░рд╛рд╣рдХ;
  • рдЖрджреЗрд╢;

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

рдЧреНрд░рд╛рд╣рдХреЛрдВ рдФрд░ рдСрд░реНрдбрд░реЛрдВ рдХреЛ рдЖрдо рддреМрд░ рдкрд░ рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореИрдЧреЗрдВрдЯреЛ рд╕реЗ рдмрд╛рд╣рд░реА рдИрдЖрд░рдкреА рд╕рд┐рд╕реНрдЯрдо рддрдХред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рд╕рд╛рде рдпрд╣ рдЖрд╕рд╛рди рд╣реИ, Magento рдХреА рдУрд░ рд╕реЗ рдЖрдкрдХреЛ рдмрд╕ рдЙрдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ "рд╣рдорд╛рд░реА рддрд░рдл рд╕реЗ рдЧреЛрд▓рд┐рдпрд╛рдБ рдЪрд▓реАрдВ"ред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд

рдлрд┐рд▓рд╣рд╛рд▓, 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);

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

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

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

Magento рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИред рдореБрдЦреНрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдИрдПрд╡реА рдбреЗрдЯрд╛ рдореЙрдбрд▓ (рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВ)ред 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);

рдореАрдбрд┐рдпрд╛

рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рд╕реНрдЯреЛрд░ (рдИ-рдХреЙрдорд░реНрд╕) рдореЗрдВ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдореАрдбрд┐рдпрд╛ рд╕рдорд░реНрдерди рдЖрдВрддрд░рд┐рдХ рд▓реЗрдЦрд╛ рдкреНрд░рдгрд╛рд▓реА (рдИрдЖрд░рдкреА) рдореЗрдВ рдХрд┐рд╕реА рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдореАрдбрд┐рдпрд╛ рд╕рдорд░реНрдерди рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрддреНрдкрд╛рдж рдХреЛ рдЖрдордиреЗ-рд╕рд╛рдордиреЗ рджрд┐рдЦрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИ; рджреВрд╕рд░реЗ рдореЗрдВ, рдпрд╣ рдЙрддреНрдкрд╛рдж рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рд╕реА рдЙрддреНрдкрд╛рдж рдХреА рдХрдо рд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХ рдЫрд╡рд┐ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИред 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-рдЖрдпрд╛рдд.

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ