Magento 2: ื™ืžืคึผืึธืจื˜ื™ื ื’ ืคึผืจืึธื“ื•ืงื˜ืŸ ืคึฟื•ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืงื•ื•ืืœืŸ

Magento ืื™ื– ืึทืŸ E- ื”ืึทื ื“ืœ ืœื™ื™ื–ื•ื ื’, ื“.ื”. ืื™ื– ืžืขืจ ืึทื™ืžืขื“ ื‘ื™ื™ึท ืกืขืœื™ื ื’ ืคึผืจืึธื“ื•ืงื˜ืŸ ื•ื•ื™ ืื•ื™ืฃ ื•ื•ืขืจื›ืึทื•ื–ื™ื ื’, ืœืึทื“ื–ืฉื™ืกื˜ื™ืงืก ืึธื“ืขืจ ืคื™ื ืึทื ืฆื™ืขืœ ืึทืงืึทื•ื ื˜ื™ื ื’ ืึทืงืึทืžืคึผืึทื ื™ื™ื ื’ ืคืืจืงื•ื™ืคื•ื ื’. ืื ื“ืขืจืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– (ืœืžืฉืœ, ERP ืกื™ืกื˜ืขืžืขืŸ) ื–ืขื ืขืŸ ื‘ืขืกืขืจ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืึทืงืึทืžืคึผืึทื ื™ื™ื ื’ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ื“ืขืจื™ื‘ืขืจ, ื’ืึทื ืฅ ืึธืคื˜ ืื™ืŸ ื“ื™ ืคื™ืจ ืคื•ืŸ ื ื™ืฆืŸ Magento ื“ื™ ืึทืจื‘ืขื˜ ืคื•ืŸ ื™ื ื˜ืึทื’ืจื™ื™ื˜ื™ื ื’ ืึท ืงืจืึธื ืžื™ื˜ ื“ื™ ืื ื“ืขืจืข ืกื™ืกื˜ืขืžืขืŸ (ืœืžืฉืœ, 1C) ืขืจื™ื™ื–ืึทื–.

ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืจื™ื“ื•ืกื˜ ืฆื• ื“ืึทื˜ืŸ ืจืขืคึผืœืึทืงื™ื™ืฉืึทืŸ ื“ื•ืจืš:

  • ืงืึทื˜ืึทืœืึธื’ (ืคึผืจืึธื“ื•ืงื˜ืŸ, ืงืึทื˜ืขื’ืึธืจื™ืขืก);
  • ื™ื ื•ื•ืึทื ื˜ืึธืจื™ ื“ืึทื˜ืŸ (ืคึผืจืึธื“ื•ืงื˜ ื‘ืึทืœืึทื ืกืขืก ืื™ืŸ ื•ื•ืขืจื›ืึทื•ืกื™ื– ืื•ืŸ ืคึผืจื™ื™ืกื™ื–);
  • ืงืœื™ื™ืึทื ืฅ;
  • ืึธืจื“ืขืจืก;

Magento ืึธืคืคืขืจืก ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืงืœืึทืก ืคื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืคึฟืึทืจ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ื˜ื™ื ื’ ื“ืึทื˜ืŸ ืื™ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก - ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื–. ืจืขื›ื˜ ืฆื• ื“ื™ ืกืคึผืขืกื™ืคื™ืงืก ืคื•ืŸ Magento, ืึทื“ื™ื ื’ ื“ืึทื˜ืŸ ืฆื• ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ื“ื•ืจืš ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื– ืื™ื– ื’ืจื™ื ื’ ืฆื• ืงืึธื“, ืึธื‘ืขืจ ืขืก ืื™ื–, ืœืึธื–ืŸ ืก ื–ืึธื’ืŸ, ืคึผืึทืžืขืœืขืš. ืื™ืŸ ื“ืขื ื•ื™ืกื’ืึทื‘ืข, ืื™ืš ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ื™ ื”ื•ื™ืคึผื˜ ืกื˜ืึทื’ืขืก ืคื•ืŸ ืคึผืจืึธื’ืจืึทืžืžืึทื˜ื™ืง ืึทื“ื™ื ื’ ืึท ืคึผืจืึธื“ื•ืงื˜ ืฆื• Magento 2 ืื™ืŸ ื“ื™ "ืงืœืึทืกื™ืฉ" ื•ื•ืขื’ - ื ื™ืฆืŸ ืจืขืคึผืึธ ืงืœืืกืŸ.

ืงืึทืกื˜ืึทืžืขืจื– ืื•ืŸ ืึธืจื“ืขืจืก ื–ืขื ืขืŸ ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืจืขืคึผืœื™ืงื™ื™ื˜ื™ื“ ืื™ืŸ ื“ื™ ืื ื“ืขืจืข ืจื™ื›ื˜ื•ื ื’ - ืคึฟื•ืŸ Magento ืฆื• ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืขืจืคึผ ืกื™ืกื˜ืขืžืขืŸ. ื“ืขืจื™ื‘ืขืจ, ืขืก ืื™ื– ืกื™ืžืคึผืœืขืจ ืžื™ื˜ ื–ื™ื™, ืื•ื™ืฃ ื“ื™ 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);

ืžืขื“ื™ืข

ื•ื•ื™ ืึท ื”ืขืจืฉืŸ, ืžืขื“ื™ืข ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืึท ืคึผืจืึธื“ื•ืงื˜ ืคึฟืึทืจ ืึท ืงืœื™ืขื ื˜ ืื™ืŸ ืึท ืงืจืึธื (E- ื”ืึทื ื“ืœ) ืื™ื– ืึทื ื“ืขืจืฉ ืคื•ืŸ ืžืขื“ื™ืข ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึผืจืึธื“ื•ืงื˜ ืคึฟืึทืจ ืึทืŸ ืึธื ื’ืขืฉื˜ืขืœื˜ืขืจ ืื™ืŸ ืึทืŸ ื™ื ืขืจืœืขืš ืึทืงืึทื•ื ื˜ื™ื ื’ ืกื™ืกื˜ืขื (ืขืจืคึผ). ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคืึทืœ, ืขืก ืื™ื– ืงืขื“ื™ื™ึทื™ืง ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืคึผืจืึธื“ื•ืงื˜ ืคึผื ื™ื ืฆื• ืคึผื ื™ื; ืื™ืŸ ื“ื™ ืจื’ืข, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื’ืขื‘ืŸ ืึท ื’ืขื ืขืจืึทืœ ื’ืขื“ืึทื ืง ืคื•ืŸ ื“ื™ ืคึผืจืึธื“ื•ืงื˜. ืึธื‘ืขืจ, ื˜ืจืึทื ืกืคืขืจื™ื ื’ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ื“ื™ ืขืจืฉื˜ื™ืง ื‘ื™ืœื“ ืคื•ืŸ ืึท ืคึผืจืึธื“ื•ืงื˜ ืื™ื– ื’ืึทื ืฅ ืคึผืจืึธืกื˜. 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);

ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืคื•ืŸ ืึท ืคึผืจืึธื“ื•ืงื˜ ืฆื• ืึท ืงืึทื˜ืขื’ืึธืจื™ืข ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื“ื™ ืงืึทื˜ืขื’ืึธืจื™ืข ืฉื™ื™ึทืŸ ืื•ืŸ ืคึผืจืึธื“ื•ืงื˜ 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 ืคึผืจืึธื“ื•ืงื˜ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื™ืžืคึผืึธืจื˜ื™ื“ ืคึผืขืจ ืฉืขื”, ืื•ืŸ ืขืก ืงืขืŸ ื ืขืžืขืŸ ื•ื•ืขื’ืŸ 100 ืฉืขื” ืฆื• ืึทืจื™ื™ึทื ืคื™ืจ 30K ืคึผืจืึธื“ื•ืงื˜ืŸ. ืจื™ืคึผืœื™ื™ืกื™ื ื’ ืึท ืœืึทืคึผื˜ืึทืคึผ ืžื™ื˜ ืึท ืกืขืจื•ื•ืขืจ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื’ืœืึทื˜ ืื•ื™ืก ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืขืคึผืขืก. ืืคึฟืฉืจ ืืคื™ืœื• ืขื˜ืœืขื›ืข ืžืึธืœ. ืื‘ืขืจ ื ื™ืฉื˜ ื“ื•ืจืš ืึธืจื“ืขืจืก ืคื•ืŸ ืžืึทื’ื ืึทื˜ื•ื“. ื˜ืึธืžืขืจ ื“ืขื ื’ื™ื›ืงื™ื™ึทื˜ ืื•ืŸ ืกืœืึธื•ื ืึทืก ืื™ื– ืฆื• ืขื˜ืœืขื›ืข ืžืึธืก ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ืกื™ื‘ื•ืช ืคึฟืึทืจ ื“ื™ ื™ืžืขืจื“ื–ืฉืึทื ืก ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืžืึทื’ืขื ื˜ืึธ/ืึทืกื™ื ืง-ื™ืžืคึผืึธืจื˜.

ื ืจืึทื“ื™ืงืึทืœ ืœื™ื™ื–ื•ื ื’ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ืคื•ืŸ ืึทืจื™ื™ึทื ืคื™ืจ ืงืขืŸ ื–ื™ื™ืŸ ื“ื™ืจืขืงื˜ ืึทืจื™ื™ึทื ื˜ืจืขื˜ืŸ ืื™ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืคืึทืœ ืึทืœืข ื“ื™ "ื’ื•ื“ื™ื–" ื•ื•ืขื’ืŸ ื“ื™ ืขืงืกื˜ืขื ืกื™ื‘ื™ืœื™ื˜ื™ ืคื•ืŸ Magento ื–ืขื ืขืŸ ืคืึทืจืคืึทืœืŸ - ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ ืึทืœืฅ "ืึทื•ื•ืึทื ืกื™ืจื˜ืข" ื–ื™ืš. ืึธื‘ืขืจ, ืขืก ืื™ื– ื•ื•ืขืจื˜ ืขืก. ืื•ื™ื‘ ืขืก ืึทืจื‘ืขื˜ ืื•ื™ืก, ืื™ืš ื•ื•ืขื˜ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ื™ ืฆื•ื’ืึทื ื’ ืžื™ื˜ ื“ื™ืจืขืงื˜ ืฉืจื™ื™ื‘ืŸ ืฆื• ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก ืื™ืŸ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึทืจื˜ื™ืงืœ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’