Magento 2: เชฌเชพเชนเซเชฏ เชธเซเชคเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚เชฅเซ€ เช‰เชคเซเชชเชพเชฆเชจเซ‹เชจเซ€ เช†เชฏเชพเชค เช•เชฐเชตเซ€

Magento เช เชˆ-เช•เซ‹เชฎเชฐเซเชธ เชธเซ‹เชฒเซเชฏเซเชถเชจ เช›เซ‡, เชเชŸเชฒเซ‡ เช•เซ‡. เชตเซ‡เชšเชพเชฃ เชธเชพเชฅเซ‡ เชตเซ‡เชฐเชนเชพเช‰เชธเชฟเช‚เช—, เชฒเซ‹เชœเชฟเชธเซเชŸเชฟเช•เซเชธ เช…เชฅเชตเชพ เชจเชพเชฃเชพเช•เซ€เชฏ เชเช•เชพเช‰เชจเซเชŸเชฟเช‚เช— เช•เชฐเชคเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจเซ‹เชจเซเช‚ เชตเซ‡เชšเชพเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชตเชงเซ เชฒเช•เซเชทเซเชฏ เช›เซ‡. เช…เชจเซเชฏ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, ERP เชธเชฟเชธเซเชŸเชฎเซเชธ) เชธเชพเชฅเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ เชฎเชพเชŸเซ‡ เชตเชงเซ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เชคเซ‡เชฅเซ€, เช† เช…เชจเซเชฏ เชธเชฟเชธเซเชŸเชฎเซ‹ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, 1C) เชธเชพเชฅเซ‡ เชธเซเชŸเซ‹เชฐเชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ Magento เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธเชฎเชพเช‚ เช˜เชฃเซ€ เชตเชพเชฐ เชŠเชญเซ€ เชฅเชพเชฏ เช›เซ‡.

เชฎเซ‹เชŸเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚, เชเช•เซ€เช•เชฐเชฃเชจเซ‡ เช†เชจเชพ เชฆเซเชตเชพเชฐเชพ เชกเซ‡เชŸเชพ เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเชฎเชพเช‚ เช˜เชŸเชพเชกเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  • เช•เซ‡เชŸเชฒเซ‹เช— (เช‰เชคเซเชชเชพเชฆเชจเซ‹, เชถเซเชฐเซ‡เชฃเซ€เช“);
  • เช‡เชจเซเชตเซ‡เชจเซเชŸเชฐเซ€ เชกเซ‡เชŸเชพ (เชตเซ‡เชฐเชนเชพเช‰เชธ เช…เชจเซ‡ เช•เชฟเช‚เชฎเชคเซ‹เชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจ เชฌเซ‡เชฒเซ‡เชจเซเชธ);
  • เช—เซเชฐเชพเชนเช•เซ‹;
  • เช“เชฐเซเชกเชฐ;

Magento เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ€ เชนเซ‡เชฐเชซเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเชจเซ‹ เชเช• เช…เชฒเช— เชตเชฐเซเช— เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ - เชญเช‚เชกเชพเชฐ. เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹เชจเซ€ เชตเชฟเชถเชฟเชทเซเชŸเชคเชพเช“เชจเซ‡ เชฒเซ€เชงเซ‡, เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช เชฆเซเชตเชพเชฐเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เช•เซ‹เชก เช•เชฐเชตเซเช‚ เชธเชฐเชณ เช›เซ‡, เชชเชฐเช‚เชคเซ เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชคเซ‡ เชงเซ€เชฎเซเช‚ เช›เซ‡. เช† เชชเซเชฐเช•เชพเชถเชจเชฎเชพเช‚, เชนเซเช‚ เชฐเซ‡เชชเซ‹ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ - "เช•เซเชฒเชพเชธเชฟเช•" เชฐเซ€เชคเซ‡ เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ 2 เชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡เชŸเชฟเช•เชฒเซ€ เชชเซเชฐเซ‹เชกเช•เซเชŸ เช‰เชฎเซ‡เชฐเชตเชพเชจเชพ เชฎเซเช–เซเชฏ เชคเชฌเช•เซเช•เชพเช“เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเช‰เช‚ เช›เซเช‚.

เช—เซเชฐเชพเชนเช•เซ‹ เช…เชจเซ‡ เช“เชฐเซเชกเชฐ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชฌเซ€เชœเซ€ เชฆเชฟเชถเชพเชฎเชพเช‚ เชจเช•เชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ - Magento เชฅเซ€ เชฌเชพเชนเซเชฏ ERP เชธเชฟเชธเซเชŸเชฎเซเชธ เชธเซเชงเซ€. เชคเซ‡เชฅเซ€, เชคเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เชธเชฐเชณ เช›เซ‡, เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ เชฌเชพเชœเซเช เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชฏเซ‹เช—เซเชฏ เชกเซ‡เชŸเชพ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ "เช…เชฎเชพเชฐเซ€ เชฌเชพเชœเซเชฅเซ€ เช—เซ‹เชณเซ€เช“ เช‰เชกเซ€ เชนเชคเซ€".

เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเซ‡เชŸเชพ เชฐเซ‡เช•เซ‹เชฐเซเชก เช•เชฐเชตเชพเชจเชพ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹

เช† เช•เซเชทเชฃเซ‡, เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹เชฎเชพเช‚ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡เชŸเชฟเช•เชฒเซ€ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเชพเชšเชตเซ‡เชฒ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช•เชพเชฎ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชซเซ‡เช•เซเชŸเชฐเซ€:

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

เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ 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 เชกเซ‡เชŸเชพ เชฎเซ‹เชกเชฒ (เช•เซ‹เชทเซเชŸเช• เชœเซเช“ 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.

เช†เชฏเชพเชคเชจเซ€ เชเชกเชช เชตเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เช†เชฎเซ‚เชฒ เช‰เช•เซ‡เชฒ เช เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเซ‹ เชชเซเชฐเชตเซ‡เชถ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹เชจเซ€ เชเช•เซเชธเซเชŸเซ‡เชจเซเชธเชฟเชฌเชฟเชฒเชฟเชŸเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชฌเชงเซ€ "เช—เซเชกเซ€เช" เช–เซ‹เชตเชพเชˆ เช—เชˆ เช›เซ‡ - เชคเชฎเชพเชฐเซ‡ เชฌเชงเซเช‚ "เช…เชฆเซเชฏเชคเชจ" เชœเชพเชคเซ‡ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡. เชœเซ‹ เช•เซ‡, เชคเซ‡ เชตเชฐเซเชฅ เช›เซ‡. เชœเซ‹ เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‹ เชนเซเช‚ เช†เช—เชพเชฎเซ€ เชฒเซ‡เช–เชฎเชพเช‚ เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐ เชธเซ€เชงเชพ เชฒเซ‡เช–เชจ เชธเชพเชฅเซ‡เชจเชพ เช…เชญเชฟเช—เชฎ เชชเชฐ เชตเชฟเชšเชพเชฐ เช•เชฐเซ€เชถ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹