Magento 2: เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เบžเบฒเบเบ™เบญเบ

Magento เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚ e-commerce, i.e. เปเบกเปˆเบ™เปเบ™เปƒเบชเปˆเบเบฒเบ™เบ‚เบฒเบเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ, เบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡, เบซเบผเบทเบšเบฑเบ™เบŠเบตเบเบฒเบ™เป€เบ‡เบดเบ™เบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบเบฒเบ™เบ‚เบฒเบ. เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบญเบทเปˆเบ™เป† (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฅเบฐเบšเบปเบš ERP) เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบš. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบฅเบทเป‰เบญเบเป†เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Magento เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบกเบฎเป‰เบฒเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบญเบทเปˆเบ™เป†เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ (เบ•เบปเบงเบขเปˆเบฒเบ‡, 1C) เป€เบเบตเบ”เบ‚เบทเป‰เบ™.

เป‚เบ”เบเปเบฅเบฐเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบ:

  • เบฅเบฒเบเบเบฒเบ™ (เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™, เบ›เบฐเป€เบžเบ”);
  • เบ‚เปเป‰เบกเบนเบ™เบชเบดเบ™เบ„เป‰เบฒเบ„เบปเบ‡เบ„เบฑเบ‡ (เบเบญเบ”เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปƒเบ™เบชเบฒเบ‡เปเบฅเบฐเบฅเบฒเบ„เบฒ);
  • เบฅเบนเบเบ„เป‰เบฒ;
  • เบ„เปเบฒเบชเบฑเปˆเบ‡;

Magento เบชเบฐเป€เบซเบ™เบตเบ›เบฐเป€เบžเบ”เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ - เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ Magento, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบœเปˆเบฒเบ™ repositories เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบฅเบฐเบซเบฑเบ”, เปเบ•เปˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™, เบŠเป‰เบฒ. เปƒเบ™เบชเบดเปˆเบ‡เบžเบดเบกเบ™เบตเป‰, เบ‚เป‰เบญเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปƒเบ™ Magento 2 เปƒเบ™เปเบšเบš "เบ„เบฅเบฒเบชเบชเบดเบ" - เป‚เบ”เบเปƒเบŠเป‰ repo classes.

เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง replicated เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบญเบทเปˆเบ™ - เบˆเบฒเบ Magento เบเบฑเบšเบฅเบฐเบšเบปเบš ERP เบžเบฒเบเบ™เบญเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ, เปƒเบ™เบ”เป‰เบฒเบ™ Magento เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฅเบทเบญเบเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ "เบฅเบนเบเบ›เบทเบ™เป„เบ”เป‰เบšเบดเบ™เบญเบญเบเบˆเบฒเบเบ‚เป‰เบฒเบ‡เบžเบงเบเป€เบฎเบปเบฒ"

เบซเบผเบฑเบเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบเบฒเบ™เบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ„เบ‡เบเบฒเบ™เปƒเบ™ Magento เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™ เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”:

function __construct (MagentoCmsModelBlockFactory $blockFactory) {
    $this->blockFactory = $blockFactory;
}

/** @var MagentoCmsModelBlock $block */
$block = $this->blockFactory->create();

เปเบฅเบฐเบเบฒเบ™เบ‚เบฝเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบœเปˆเบฒเบ™ Repository:

function __construct (MagentoCmsApiBlockRepositoryInterface $blockRepo) {
    $this->blockRepo = $blockRepo;
}

$this->blockRepo->save($block);

เบงเบดเบ—เบตเบเบฒเบ™ "เป‚เบฎเบ‡เบ‡เบฒเบ™" เปเบฅเบฐ "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);

เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™เบชเปเบฒเบฅเบฑเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบนเบเบ„เป‰เบฒเปƒเบ™เบฎเป‰เบฒเบ™ (เบญเบตเบ„เบญเบกเป€เบกเบตเบŠ) เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™เบชเปเบฒเบฅเบฑเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เปƒเบ™เบฅเบฐเบšเบปเบšเบšเบฑเบ™เบŠเบตเบžเบฒเบเปƒเบ™ (ERP). เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เปเบฒเบญเบดเบ”, เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบชเบฐเปเบ”เบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ•เปเปˆเบซเบ™เป‰เบฒ; เปƒเบ™เบ—เบตเบชเบญเบ‡, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเปƒเบซเป‰เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เป‚เบญเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบฎเบนเบšเบžเบฒเบšเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ—เบปเปˆเบงเป„เบ›. case เปƒเบ™เป€เบงเบฅเบฒเบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบ‚เปเป‰เบกเบนเบ™.

เป€เบกเบทเปˆเบญเป€เบžเบตเปˆเบกเบฎเบนเบšเบžเบฒเบšเบœเปˆเบฒเบ™เบเบฐเบ”เบฒเบ™ admin, เบฎเบนเบšเบžเบฒเบšเบ—เปเบฒเบญเบดเบ”เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบŠเบปเปˆเบงเบ„เบฒเบง (./pub/media/tmp/catalog/product) เปเบฅเบฐโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบขเบฑเบ”โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ•เบฐโ€‹เบžเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเป‰เบฒเบโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบชเบทเปˆโ€‹เบกเบงเบ™โ€‹เบŠเบปเบ™ (./pub/media/catalog/product). เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป€เบžเบตเปˆเบกเบœเปˆเบฒเบ™เบเบฐเบ”เบฒเบ™ admin, เบฎเบนเบšเบžเบฒเบšเบˆเบฐเบ–เบทเบ tagged 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);

เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™เป„เบ”เป‰เบ–เบทเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ—เปเบฒเบญเบดเบ”เบ›เบฐเบซเบเบฑเบ”เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปเบฅเบฐเป€เบญเบปเบฒเบกเบฑเบ™เบญเบญเบเบˆเบฒเบ repository เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฅเบฐเบšเบธเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ label เป€เบกเบทเปˆเบญเป€เบžเบตเปˆเบกเบฅเบฒเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบชเปˆเบซเป‰เบญเบ‡เบชเบฐเปเบ”เบ‡เบชเบทเปˆเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™ (เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™ Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

เบซเบกเบงเบ”เบซเบกเบนเปˆ

เป€เบฅเบทเป‰เบญเบเป†, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบฎเป‰เบฒเบ™เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ backend เบซเบผเบทเบเบฒเบ™เบˆเบฑเบ”เบงเบฒเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เปƒเบ™เบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบเบธเบ”เบ—เบฐเบชเบฒเบ”เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเป€เบžเบ”เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบžเบฒเบเปƒเบ™เบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบซเบผเบฒเบเบ›เบฑเบ”เปƒเบˆ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบถเบ”เบ•เบดเบ”เบเบฑเบšเบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • backend เปเบฅเบฐเบ›เบฐเป€เบžเบ”เบฎเป‰เบฒเบ™เบ–เบทเบเบ›เบฝเบšเบ—เบฝเบšเป‚เบ”เบเบŠเบทเปˆ;
  • เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบฎเป‰เบฒเบ™โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบกเบฑเบ™โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เบžเบฒเบโ€‹เปƒเบ•เป‰โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบฎเบฒเบ (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 เปเบกเปˆเบ™โ€‹เบ‚เป‰เบญเบ™โ€‹เบ‚เป‰เบฒเบ‡โ€‹เบ‡เปˆเบฒเบโ€‹. เบ‚เป‰เบญเบเป„เบ”เป‰เบฅเบงเบกเบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบกเบ”เบนเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡ "flacer32/mage2_ext_demo_import". เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ console เปƒเบ™เป‚เบกเบ”เบนเบ™ 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

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™