Magento 2: αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αž–αžΈαž”αŸ’αžšαž—αž–αžαžΆαž„αž€αŸ’αžšαŸ…

Magento αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ e-commerce, i.e. αž‚αžΊαž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž›αž€αŸ‹αž•αž›αž·αžαž•αž›αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž€αžΆαžšαžŸαŸ’αžαž»αž€αž‘αž»αž€ αž—αžŸαŸ’αžαž»αž—αžΆαžš αž¬αž‚αžŽαž“αŸαž™αŸ’αž™αž αž·αžšαž‰αŸ’αž‰αžœαžαŸ’αžαž»αžŠαŸ‚αž›αž’αž˜αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž›αž€αŸ‹αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž (αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαž–αŸαž“αŸ’αž’ ERP) αž‚αžΊαžŸαŸαž€αŸ’αžαž·αžŸαž˜αž‡αžΆαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Magento αž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸƒαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž αžΆαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αžΆαŸ†αž„αž“αŸαŸ‡ (αž§αž‘αžΆαž αžšαžŽαŸ 1C) αž€αžΎαžαž‘αžΎαž„αŸ”

αž‡αžΆαž‘αžΌαž‘αŸ… αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž‘αŸ…αž‡αžΆαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αŸ–

  • αž€αžΆαžαžΆαž‘αž»αž€ (αž•αž›αž·αžαž•αž›, αž”αŸ’αžšαž—αŸαž‘);
  • αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαžΆαžšαž–αžΎαž—αŸαžŽαŸ’αžŒ (αžŸαž˜αžαž»αž›αŸ’αž™αž•αž›αž·αžαž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž“αž·αž„αžαž˜αŸ’αž›αŸƒ);
  • αž’αžαž·αžαž·αž‡αž“;
  • αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰;

Magento αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž“αžΌαžœαžαŸ’αž“αžΆαž€αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž“αŸƒαžœαžαŸ’αžαž»αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ - αžƒαŸ’αž›αžΆαŸ†αž„. αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹ Magento αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž˜αžšαž™αŸˆαžƒαŸ’αž›αžΆαŸ†αž„αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαžΌαž˜αž“αž·αž™αžΆαž™αžαžΆαž™αžΊαžαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž—αž•αŸ’αžŸαžΆαž™αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž•αž›αž·αžαž•αž›αžαžΆαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ… Magento 2 αžαžΆαž˜αžœαž·αž’αžΈ "αž”αž»αžšαžΆαžŽ" - αžŠαŸ„αž™αž”αŸ’αžšαžΎαžαŸ’αž“αžΆαž€αŸ‹ repo αŸ”

αž’αžαž·αžαž·αž‡αž“ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αžαžΆαž˜αž‘αž·αžŸαžŠαŸ…αž•αŸ’αžŸαŸαž„αž‘αŸ€αž - αž–αžΈ 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);

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αž "Factory" αž“αž·αž„ "Repository" αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΌαžŠαŸ‚αž›αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ‚αž“ 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);

αž αžΎαž™αž“αŸ…αž–αŸαž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‚αŸ†αžšαžΌαžαžΆαž˜αžšαž™αŸˆαžœαžαŸ’αžαž» repoαŸ–

$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);

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™

αžαžΆαž˜αž€αŸ’αž”αž½αž“αž˜αž½αž™ αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž›αž·αžαž•αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž αžΆαž„ (e-commerce) αžαž»αžŸαž–αžΈαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž›αž·αžαž•αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž»αž‚αŸ’αž‚αž›αž·αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αžŽαž“αŸαž™αŸ’αž™αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„ (ERP)αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž‘αžΈ 1 αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αž„αŸ’αž αžΆαž‰αž•αž›αž·αžαž•αž›αž‘αž›αŸ‹αž˜αž»αž; αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαž•αŸ’αž‘αŸαžšαž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αžšαžΌαž”αž—αžΆαž–αž…αž˜αŸ’αž”αž„αž“αŸƒαž•αž›αž·αžαž•αž›αž‚αžΊαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαžŽαžΆαžŸαŸ‹αŸ” 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).

αž”αŸ’αžšαž—αŸαž‘

αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αŸ’αžšαž—αŸαž‘αžšαž”αžŸαŸ‹αž αžΆαž„ αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž¬αž€αžΆαžšαžŠαžΆαž€αŸ‹αž•αž›αž·αžαž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαž’αžΆαž…αžαž»αžŸαž‚αŸ’αž“αžΆαžαŸ’αž›αžΆαŸ†αž„αŸ” αž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘ αž“αž·αž„αž•αž›αž·αžαž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžαŸ’αžαžΆαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαž€αžΆαž“αŸ‹αžαŸ’αž‡αžΆαž”αŸ‹αž“αžΌαžœαž…αŸ†αžŽαž»αž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž αžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαž—αŸαž‘αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αžΆαŸ†αž…αžΌαž›αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž αžΆαž„αž“αŸ„αŸ‡ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž”αŸ’αžšαž—αŸαž‘ root (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 αž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŽαžΆαžŸαŸ‹αŸ” αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αžαžΆαž„β€‹αž›αžΎβ€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž˜αŸ‰αžΌαžŒαž»αž›β€‹αžŸαžΆαž€αž›αŸ’αž”αž„β€‹αž˜αž½αž™ & #; αŸ”flacer32/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 αž’αžΆαž…αž“αžΆαŸ†αž…αžΌαž›αž€αŸ’αž“αž»αž„αž˜αž½αž™αž˜αŸ‰αŸ„αž„ αž αžΎαž™αžœαžΆαž’αžΆαž…αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž”αŸ’αžšαž αŸ‚αž› 100 αž˜αŸ‰αŸ„αž„αžŠαžΎαž˜αŸ’αž”αžΈαž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž› 30K αŸ” αž€αžΆαžšαž‡αŸ†αž“αž½αžŸαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαž™αž½αžšαžŠαŸƒαž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž˜αžΆαž“αž—αžΆαž–αžšαž›αžΌαž“αž”αž“αŸ’αžαž·αž…αŸ” αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αž‘αŸαŸ” αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž›αŸ’αž”αžΏαž“β€‹αž“αž·αž„β€‹αž™αžΊαžβ€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž αŸαžαž»αž•αž›β€‹αž˜αž½αž™β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž›αŸαž…β€‹αž…αŸαž‰β€‹αž“αžΌαžœβ€‹αž‚αž˜αŸ’αžšαŸ„αž„ magento/async-import.

αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžšαŸ‰αžΆαžŒαžΈαž€αžΆαž›αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž’αžΆαž…αž‡αžΆαž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ "αž‘αŸ†αž“αž·αž‰" αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαž–αž„αŸ’αžšαžΈαž€ Magento αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹ - αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„ "αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹" αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αž·αž…αžΆαžšαžŽαžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹