Magento 2: เจฌเจพเจนเจฐเฉ€ เจธเจฐเฉ‹เจคเจพเจ‚ เจคเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆ เจ†เจฏเจพเจค เจ•เจฐเจจเจพ

Magento เจ‡เฉฑเจ• เจˆ-เจ•เจพเจฎเจฐเจธ เจนเฉฑเจฒ เจนเฉˆ, i.e. เจตเจฟเจ•เจฐเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธเจฟเฉฐเจ—, เจฒเฉŒเจœเจฟเจธเจŸเจฟเจ•เจธ เจœเจพเจ‚ เจตเจฟเฉฑเจคเฉ€ เจฒเฉ‡เจ–เจพเจ•เจพเจฐเฉ€ เจฆเฉ€ เจฌเจœเจพเจ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ‡เจšเจฃ เจฆเจพ เจตเจงเฉ‡เจฐเฉ‡ เจ‰เจฆเฉ‡เจธเจผ เจนเฉˆเฅค เจนเฉ‹เจฐ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, 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);

เจ‰เจคเจชเจพเจฆ เจฆเจพ เจจเจพเจฎ เจ‰เจคเจชเจพเจฆ เจตเจฐเจšเจฐ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (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-เจ†เจฏเจพเจค.

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

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹