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

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

рд░ рдареВрд▓реЛ рд░реВрдкрдорд╛, рдПрдХреАрдХрд░рдгрд▓рд╛рдИ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐рдорд╛ рдХрдо рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

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

Magento рд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рд╣реЗрд░рдлреЗрд░ рдЧрд░реНрди рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ - рднрдгреНрдбрд╛рд░рд╣рд░реВред Magento рдХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рдХрд╛рд░рдг, рднрдгреНрдбрд╛рд░рд╣рд░реВ рдорд╛рд░реНрдлрдд рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рдердкреНрди рдХреЛрдб рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ, рддрд░ рдпреЛ рд╣реЛ, рднрдиреМрдВ, рдврд┐рд▓реЛред рдпрд╕ рдкреНрд░рдХрд╛рд╢рдирдорд╛, рдо рд░реЗрдкреЛ рдХреНрд▓рд╛рд╕рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ - "рдХреНрд▓рд╛рд╕рд┐рдХ" рддрд░рд┐рдХрд╛рдорд╛ Magento 2 рдорд╛ рдЙрддреНрдкрд╛рджрди рдердкреНрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдордХреЛ рдореБрдЦреНрдп рдЪрд░рдгрд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдЫреБред

рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рд░ рдЕрд░реНрдбрд░рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдЕрд░реНрдХреЛ рджрд┐рд╢рд╛рдорд╛ рджреЛрд╣реЛрд░рд┐рдиреНрдЫрдиреН - Magento рджреЗрдЦрд┐ рдмрд╛рд╣реНрдп ERP рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ред рддрд╕рд░реНрде, рдпреЛ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рд░рд▓ рдЫ, 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);

рдЙрддреНрдкрд╛рджрдирдХреЛ рдирд╛рдо рдЙрддреНрдкрд╛рджрди 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);

рд╢реНрд░реЗрдгреА ID рд░ рдЙрддреНрдкрд╛рджрди 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.

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди