Magento 2: เดฌเดพเดนเตเดฏ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

Magento เด’เดฐเต เด‡-เด•เตŠเดฎเต‡เดดเตโ€Œเดธเต เดชเดฐเดฟเดนเดพเดฐเดฎเดพเดฃเต, เด…เดคเดพเดฏเดคเต. เดตเต†เดฏเตผเดนเต—เดธเดฟเด‚เด—เต, เดฒเต‹เดœเดฟเดธเตเดฑเตเดฑเดฟเด•เตเดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดซเดฟเดจเดพเตปเดทเตเดฏเตฝ เด…เด•เตเด•เตŒเดฃเตเดŸเดฟเด‚เด—เต เดŽเดจเตเดจเดฟเดตเดฏเต†เด•เตเด•เดพเดณเตเด‚ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เดตเดฟเตฝเด•เตเด•เดพเตป เดฒเด•เตเดทเตเดฏเดฎเดฟเดŸเตเดจเตเดจเต. เดฎเดฑเตเดฑเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, ERP เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพ) เด…เดจเตเดฌเดจเตเดง เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ, เดฎเดฟเด•เตเด•เดชเตเดชเต‹เดดเตเด‚ Magento เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดˆ เดฎเดฑเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเตเดฎเดพเดฏเดฟ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, 1C) เด’เดฐเต เดธเตเดฑเตเดฑเต‹เตผ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดšเตเดฎเดคเดฒ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต.

เดฎเตŠเดคเตเดคเดคเตเดคเดฟเตฝ, เดธเด‚เดฏเต‹เดœเดจเด‚ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดชเด•เตผเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดšเตเดฐเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

  • เด•เดพเดฑเตเดฑเดฒเต‹เด—เต (เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ, เดตเดฟเดญเดพเด—เด™เตเด™เตพ);
  • เด‡เตปเดตเต†เตปเตเดฑเดฑเดฟ เดกเดพเดฑเตเดฑ (เดตเต†เดฏเตผเดนเต—เดธเตเด•เดณเดฟเดฒเตเด‚ เดตเดฟเดฒเด•เดณเดฟเดฒเตเด‚ เด‰เตฝเดชเตเดชเดจเตเดจ เดฌเดพเดฒเตปเดธเต);
  • เด‰เดชเดญเต‹เด•เตเดคเดพเด•เตเด•เตพ;
  • เด‰เดคเตเดคเดฐเดตเตเด•เตพ;

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดกเดพเดฑเตเดฑ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ 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 เดกเตŠเดฎเต†เดฏเตโ€Œเดจเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดชเตเดฐเดงเดพเดจ เดฎเต‹เดกเดฒเตเด•เตพเด•เตเด•เตเด‚ "Factory", "Repository" เดธเดฎเต€เดชเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เด…เดŸเดฟเดธเตเดฅเดพเดจ เด‰เตฝเดชเตเดชเดจเตเดจ เดตเดฟเดตเดฐเด™เตเด™เตพ

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

เด’เดฐเต เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเต† เด’เดฐเต เดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดตเดฟเดญเดพเด—เด‚ เดเดกเดฟเดฏเตเด‚ เด‰เตฝเดชเตเดชเดจเตเดจเด‚ เดŽเดธเตโ€Œเด•เต†เดฏเตเดตเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต:

/** @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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•