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

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚ β€žFactoryβ€œ ΠΈ β€ž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);

ΠΈ ΠΏΡ€ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Ρ‡Ρ€Π΅Π· Ρ€Π΅ΠΏΠΎ ΠΎΠ±Π΅ΠΊΡ‚Π°:

$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-commerce) сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ ΠΌΠ΅Π΄ΠΈΠΉΠ½Π°Ρ‚Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΡΡŠΡ‰ΠΈΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π·Π° слуТитСл във Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° счСтоводна систСма (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).

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ

ЧСсто ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉΠ½Π°Ρ‚Π° структура Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ Π±Π΅ΠΊΠ΅Π½Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π² тях ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈΡ‚Π΅ Π·Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π² тях зависят ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС ΠΏΡ€ΠΈΠ΄ΡŠΡ€ΠΆΠ°ΠΌ към слСдното:

  • backend ΠΈ store ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ сС сравняват ΠΏΠΎ ΠΈΠΌΠ΅;
  • Π°ΠΊΠΎ сС ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π° катСгория, която Π½Π΅ Π΅ Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, Ρ‚ΠΎΠ³Π°Π²Π° тя сС създава ΠΏΠΎΠ΄ основната катСгория (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 ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½ΠΈ Π½Π° час ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚Π½Π΅ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 100 часа Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° 30K ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Замяната Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏ със ΡΡŠΡ€Π²ΡŠΡ€ Π²ΠΈ позволява донякъдС Π΄Π° ΠΈΠ·Π³Π»Π°Π΄ΠΈΡ‚Π΅ ситуацията. МоТС Π±ΠΈ Π΄ΠΎΡ€ΠΈ няколко ΠΏΡŠΡ‚ΠΈ. Но Π½Π΅ ΠΏΠΎ ΠΏΠΎΡ€ΡΠ΄ΡŠΡ†ΠΈ. МоТС Π±ΠΈ Ρ‚Π°Π·ΠΈ Π±ΡŠΡ€Π·ΠΈΠ½Π° ΠΈ мудност Π΄ΠΎ извСстна стСпСн Π΅ Π΅Π΄Π½Π° ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° magento/async-ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅.

Π Π°Π΄ΠΈΠΊΠ°Π»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° скоростта Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²Π»ΠΈΠ·Π°Π½Π΅ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай всички β€žΠ±Π»Π°Π³ΠΈΠ½ΠΈβ€œ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚Ρ‚Π° Π½Π° Magento сС губят - Ρ‰Π΅ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ всичко β€žΠ½Π°ΠΏΡ€Π΅Π΄Π½Π°Π»ΠΎβ€œ сами. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° си заслуТава. Ако сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ, Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° с Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ писанС Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ Π² слСдващата статия.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€