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

ΠœΠ΅Π΄ΠΈΡƒΠΌΠΈ

Како ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, мСдиумската ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²ΠΎ ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π° (Π΅-Ρ‚Ρ€Π³ΠΎΠ²ΠΈΡ˜Π°) ​​сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π° ΠΎΠ΄ мСдиумската ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° истиот ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π·Π° Π²Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π²ΠΎ Π²Π½Π°Ρ‚Ρ€Π΅ΡˆΠ΅Π½ смСтководствСн систСм (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).

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

ЧСсто, структурата Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°Ρ‚Π° ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° Π·Π°Π΄Π½ΠΈΠ½Π° ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π½ΠΈΠ² ΠΌΠΎΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈΡ‚Π΅ Π·Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π½ΠΈΠ² зависат ΠΎΠ΄ ΠΌΠ½ΠΎΠ³Ρƒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ. Π’ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС Π·Π°Π΄Ρ€ΠΆΡƒΠ²Π°ΠΌ Π½Π° слСдново:

  • ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π½Π° Π·Π°Π΄Π½ΠΈΠ½Π°Ρ‚Π° ΠΈ ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°Ρ‚Π° сС спорСдуваат ΠΏΠΎ ΠΈΠΌΠ΅;
  • Π°ΠΊΠΎ Π΅ ΡƒΠ²Π΅Π·Π΅Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ˜Π° која Π½Π΅ Π΅ Π²ΠΎ ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Ρˆ Ρ‚Π°Π° сС ΠΊΡ€Π΅ΠΈΡ€Π° ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° root (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 часа Π·Π° ΡƒΠ²ΠΎΠ· Π½Π° 30 илјади ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ. Π—Π°ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠΎΡ‚ со сСрвСр Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° ΠΌΠ°Π»ΠΊΡƒ Π΄Π° ја ΠΈΠ·ΠΌΠ°Π·Π½Π΅Ρ‚Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. МоТСби Π΄ΡƒΡ€ΠΈ ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠ°Ρ‚ΠΈ. Но, Π½Π΅ ΠΏΠΎ Π½Π°Ρ€Π΅Π΄Π±ΠΈ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π°. МоТСби ΠΎΠ²Π°Π° Π±Ρ€Π·ΠΈΠ½Π° ΠΈ бавност Π΅ Π΄ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ стСпСн Π΅Π΄Π½Π° ΠΎΠ΄ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΡ˜Π°Π²Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΌΠ°Π³Π΅Π½Ρ‚ΠΎ/асинк-ΡƒΠ²ΠΎΠ·.

Π Π°Π΄ΠΈΠΊΠ°Π»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Ρ€Π·ΠΈΠ½Π°Ρ‚Π° Π½Π° ΡƒΠ²ΠΎΠ· Π±ΠΈ ΠΌΠΎΠΆΠ΅Π»ΠΎ Π΄Π° Π±ΠΈΠ΄Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π²Π»Π΅Π· Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½ΠΎ Π²ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜ ситС β€žΠ΄ΠΎΠ±Ρ€ΠΈβ€œ Π²ΠΎ однос Π½Π° СкстСнзивноста Π½Π° Magento сС ΠΈΠ·Π³ΡƒΠ±Π΅Π½ΠΈ - ќС ΠΌΠΎΡ€Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ сè β€žΠ½Π°ΠΏΡ€Π΅Π΄Π½ΠΎβ€œ сами. Π‘Π΅ΠΏΠ°ΠΊ, Π²Ρ€Π΅Π΄ΠΈ. Ако успСС, ќС Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌ пристапот со Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π²ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€