Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия описах процСса Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π² Magento 2 ΠΏΠΎ обичайния Π½Π°Ρ‡ΠΈΠ½ β€” Ρ‡Ρ€Π΅Π· ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. ΠžΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΈΡΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° доста ниска скорост Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. На Π»Π°ΠΏΡ‚ΠΎΠΏΠ° ΠΌΠΈ излизашС ΠΎΠΊΠΎΠ»ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² сСкунда. Π’ Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ β€” Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ записванС Π² Π±Π°Π·Π°Ρ‚Π°, заобикаляйки стандартнитС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° Magento 2 (ΠΌΠΎΠ΄Π΅Π»ΠΈ, Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ). ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅, осигуряващи ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Π½Π° към всСки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ, способСн Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с MySQL.

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност: Π’ Magento ΠΈΠΌΠ° Π³ΠΎΡ‚ΠΎΠ²Π° функционалност Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ, вСроятно, Ρ‰Π΅ Π²ΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ. Но Π°ΠΊΠΎ Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ ΠΎΡ‚ ΠΏΠΎ-пълСн ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° процСса Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π΄ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° CSV Ρ„Π°ΠΉΠ» Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ β€” Π΄ΠΎΠ±Ρ€Π΅ дошли ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

ΠšΠΎΠ΄ΡŠΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ слСд написванСто Π½Π° Π΄Π²Π΅Ρ‚Π΅ статии, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС видян Π² Magento ΠΌΠΎΠ΄ΡƒΠ»Π° β€žflancer32/mage2_ext_demo_importβ€œ. Π•Ρ‚ΠΎ някои ограничСния, ΠΊΠΎΠΈΡ‚ΠΎ спазвах, Π·Π° Π΄Π° опростя ΠΊΠΎΠ΄Π° Π½Π° дСмонстрационния ΠΌΠΎΠ΄ΡƒΠ»:

  • ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ само сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚, Π½Π΅ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚.
  • Π•Π΄Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅
  • Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Ρ‚ сС само ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅, Π±Π΅Π· тяхната структура
  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ‚Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° вСрсия 2.3

JSON Π·Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚:

{
  "sku": "MVA20D-UBV-3",
  "name": "Π—Π°ΠΏΡƒΡˆΠ°Π»ΠΊΠ° Π·Π° ΠΏΠ»ΠΎΠΌΠ±ΠΈΡ€Π°Π½Π΅ VA47-29 IEK",
  "desc": "ΠžΡΠΈΠ³ΡƒΡ€ΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ устройствата ...",
  "desc_short": "Π—Π°ΠΏΡƒΡˆΠ°Π»ΠΊΠ°Ρ‚Π° Π·Π° ΠΏΠ»ΠΎΠΌΠ±ΠΈΡ€Π°Π½Π΅ VA47-29 IEK Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π·Π° ...",
  "price": 5.00,
  "qty": 25,
  "categories": ["ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1", "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2"],
  "image_path": "mva20d_ubv_3.png"
}

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° основнитС Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅

  • рСгистрация Π½Π° самия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚
  • Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈ уСбсайта
  • основни Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° (EAV)
  • ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π΄Π°Π½Π½ΠΈ (количСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½Π° склад)
  • ΠΌΠ΅Π΄ΠΈΠΈ (снимки)
  • Π²Ρ€ΡŠΠ·ΠΊΠ° с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°

РСгистрация Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° информация Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° сС Π½Π°ΠΌΠΈΡ€Π° Π² catalog_product_entity:

Π‘ΠͺЗДАЙВЕ Π’ΠΠ‘Π›Π˜Π¦Π `catalog_product_entity` (
  `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ‚Π°',
  `attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π½Π°Π±ΠΎΡ€Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ',
  `type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ‚ΠΈΠΏΠ°',
  `sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
  `has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Има ΠΎΠΏΡ†ΠΈΠΈ',
  `required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Π—Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Π’Ρ€Π΅ΠΌΠ΅ Π½Π° създаванС',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Π’Ρ€Π΅ΠΌΠ΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅',
  PRIMARY KEY (`entity_id`),
  KEY `CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
  KEY `CATALOG_PRODUCT_ENTITY_SKU` (`sku`)
)

Минимална Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° информация Π·Π° създаванС Π½Π° запис Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅:

  • attribute_set_id
  • sku

Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ:

  • type_id β€” Π°ΠΊΠΎ Π½Π΅ посочим, Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ β€˜simple’

Π—Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ записванС Π² Π±Π°Π·Π°Ρ‚Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ DB Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π° Π½Π° самата Magento:

function create($sku, $typeId, $attrSetId)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity');
    $bind = [
        'sku' => $sku,
        'type_id' => $typeId,
        'attribute_set_id' => $attrSetId
    ];
    $conn->insert($table, $bind);
    $result = $conn->lastInsertId($table);
    return $result;
}

Π‘Π»Π΅Π΄ рСгистрацията Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² catalog_product_entity Ρ‚ΠΎΠΉ става Π²ΠΈΠ΄ΠΈΠΌ Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, Π² Ρ€Π΅ΡˆΠ΅Ρ‚ΠΊΠ°Ρ‚Π° с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ (Catalog / Products).

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Π’Ρ€ΡŠΠ·ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° с уСбсайта

Π’Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° с сайта опрСдСля Π² ΠΊΠΎΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈ ΠΈ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π½Π° ΠΏΡ€Π΅Π΄Π½Π°Ρ‚Π° част.

function linkToWebsite($prodId, $websiteId)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_website');
    $bind = [
        'product_id' => $prodId,
        'website_id' => $websiteId
    ];
    $conn->insert($table, $bind);
}

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Основни Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

ΠŸΡ€ΠΈ новорСгистриран ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ всС ΠΎΡ‰Π΅ няма Π½ΠΈΡ‚ΠΎ ΠΈΠΌΠ΅, Π½ΠΈΡ‚ΠΎ описаниС. Всичко Ρ‚ΠΎΠ²Π° става Ρ‡Ρ€Π΅Π· EAV Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ. Π•Ρ‚ΠΎ списък Π½Π° основнитС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, Π·Π° Π΄Π° сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΡŠΡ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° ΠΏΡ€Π΅Π΄Π½Π°Ρ‚Π° част:

  • name
  • price
  • description
  • short_description
  • status
  • tax_class_id
  • url_key
  • visibility

ΠžΡ‚Π΄Π΅Π»Π΅Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° сС добавя ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½ (опуснати са Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈ Ρ‚ΠΈΠΏΠ° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎ нСговия ΠΊΠΎΠ΄):

ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° функция create($prodId, $attrCode, $attrValue)
{
    $attrId = /* ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Ρ‚Π΅ ID Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° *
    $attrType = /* ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Ρ‚Π΅ Ρ‚ΠΈΠΏΠ° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° [datetime|decimal|int|text|varchar] ΠΏΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° *02
    Π°ΠΊΠΎ ($attrId) {
        /** @var MagentoFrameworkAppResourceConnection $this->resource *02
        /** @var MagentoFrameworkDBAdapterPdoMysql $conn *02
        $conn = $this->resource->getConnection();
        $tblName = 'catalog_product_entity_' . $attrType;
        $table = $this->resource->getTableName($tblName);
        $bind = [
            'attribute_id' => $attrId,
            'entity_id' => $prodId,
            02/* поставСтС всички Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π² основния ΠΌΠ°Π³Π°Π·ΠΈΠ½ с id=0 (Π°Π΄ΠΌΠΈΠ½) *02
            'store_id' => 0,
            'value' => $attrValue
        ];
        $conn->insert($table, $bind);
    }
}

Π§Ρ€Π΅Π· ΠΊΠΎΠ΄Π° Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° опрСдСлямС нСговия id ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ (datetime, decimal, int, text, varchar), слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° записвамС Π΄Π°Π½Π½ΠΈ Π·Π° административния ΠΌΠ°Π³Π°Π·ΠΈΠ½ (store_id = 0).

Π‘Π»Π΅Π΄ добавянСто Π½Π° горСспомСнатитС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, сС ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π² админския ΠΏΠ°Π½Π΅Π»:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Π”Π°Π½Π½ΠΈ Π·Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π°

Π‘ вСрсии 2.3 Π² Magento ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π΄Π²Π° Π½Π°Π±ΠΎΡ€Π° Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, осигуряващи ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½Π° информация (количСството Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°):

  • cataloginventory_*: стара структура;
  • inventory_*: Π½ΠΎΠ²Π° структура (MSI β€” ΠœΡƒΠ»Ρ‚ΠΈ Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π˜Π½Π²Π΅Π½Ρ‚Π°Ρ€);

Π”Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π° трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ добавяни ΠΈ Π² Π΄Π²Π΅Ρ‚Π΅ структури, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° структура всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ напълно нСзависима ΠΎΡ‚ старата (ΠΌΠ½ΠΎΠ³ΠΎ Π΅ вСроятно, Ρ‡Π΅ Π·Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ склада Π² Π½ΠΎΠ²Π°Ρ‚Π° структура сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° cataloginventory_stock_status Π² качСството Π½Π° inventory_stock_1).

cataloginventory_

ΠŸΡ€ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° Magneto 2.3, ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ 2 записа Π² store_website, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Π΄Π²Π° сайта β€” административСн ΠΈ основСн клиСнтски:

website_id|code |name        |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
         0|admin|Админ       |         0|               0|         0|
         1|base |ОсновСн сайт|         0|               1|         1|

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° cataloginventory_stock ΠΈΠΌΠ°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ запис:

stock_id|website_id|stock_name|
--------|----------|----------|
       1|         0|По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅   |

Π’.Π΅., Π² старата структура ΠΈΠΌΠ°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ β€žΡΠΊΠ»Π°Π΄β€œ (stock) ΠΈ Ρ‚ΠΎΠΉ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с административния сайт. ДобавянСто Π½Π° Π½ΠΎΠ²ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ/склади Π² MSI (Π½ΠΎΠ²Π°Ρ‚Π° структура) Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ появата Π½Π° Π½ΠΎΠ²ΠΈ записи Π² cataloginventory_stock.

Π”Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π² старата структура ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ сС записват Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅:

  • cataloginventory_stock_item
  • cataloginventory_stock_status

cataloginventory_stock_item

function createOldItem($prodId, $qty)
{
    $isQtyDecimal = (((int)$qty) != $qty);
    $isInStock = ($qty > 0);
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('cataloginventory_stock_item');
    $bind = [
        'product_id' => $prodId,
        /* we use one only stock in 'cataloginventory' structure by default */
        'stock_id' => 1,
        'qty' => $qty,
        'is_qty_decimal' => $isQtyDecimal,
        'is_in_stock' => $isInStock,
        /* default stock is bound to admin website (see `cataloginventory_stock`) */
        'website_id' => 0
    ];
    $conn->insert($table, $bind);
}

cataloginventory_stock_status

function createOldStatus($prodId, $qty)
{
    $isInStock = ($qty > 0);
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('cataloginventory_stock_status');
    $bind = [
        'product_id' => $prodId,
        /* we use one only stock in 'cataloginventory' structure by default */
        'stock_id' => 1, 
        'qty' => $qty,
        'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
        /* default stock is bound to admin website (see `cataloginventory_stock`) */
        'website_id' => 0 
    ];
    $conn->insert($table, $bind);
}

инвСнтаризация_

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° структура Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° 1 β€žΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» (inventory_source):

source_code|name          |enabled|description   |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default    |Default Source|      1|Default Source|0.000000| 0.000000|US        |...|

ΠΈ Π΅Π΄ΠΈΠ½ β€žΡΠΊΠ»Π°Π΄Β» (inventory_stock):

stock_id|name         |
--------|-------------|
       1|Default Stock|

Β«Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» прСдставлява физичСско Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ (Π·Π°ΠΏΠΈΡΡŠΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° физичСски ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΈ ΠΈ пощСнски адрСс). β€žΠ‘ΠΊΠ»Π°Π΄Β» прСдставлява Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° няколко β€žΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°β€œ (inventory_source_stock_link)

link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
      1|       1|default    |       1|

Π½Π° Π½ΠΈΠ²ΠΎ, ΠΏΡ€ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с ΠΊΠ°Π½Π°Π»Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π° (inventory_stock_sales_channel)

type   |code|stock_id|
-------|----|--------|
website|base|       1|

БъдСйки ΠΏΠΎ структурата Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, сС ΠΏΡ€Π΅Π΄Π²ΠΈΠΆΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π°, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π²Ρ€ΡŠΠ·ΠΊΠ° β€žstockΒ«-Β«websiteΒ» (Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° с уСбсайт сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π° Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ΄Π° Π½Π° уСбсайта β€” base).

Π•Π΄ΠΈΠ½ β€žΡΠΊΠ»Π°Π΄Β» ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ с ΠΌΠ½ΠΎΠ³ΠΎ β€žΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΒ«, Π° Π΅Π΄ΠΈΠ½ β€žΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» β€” с ΠΌΠ½ΠΎΠ³ΠΎ β€žΡΠΊΠ»Π°Π΄ΠΈΒ» (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ β€žΠΌΠ½ΠΎΠ³ΠΎ към ΠΌΠ½ΠΎΠ³ΠΎβ€œ). Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ правят default ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ β€žΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» ΠΈ β€žΡΠΊΠ»Π°Π΄Β«. Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ прСнастроСни към Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΡ‰Π½ΠΎΡΡ‚ΠΈ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ΄ β€” възниква Π³Ρ€Π΅ΡˆΠΊΠ° β€žCan not save link related to Default Source or Default Stockβ€œ). По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° структурата Π½Π° MSI Π² Magento 2 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² статията β€žΠ‘ΠΈΡΡ‚Π΅ΠΌΠ° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° склад с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° CQRS ΠΈ Event Sourcing. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Β«.

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ конфигурацията ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‰Π΅ добавя цялата ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½Π° информация Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Π² ΠΊΠ°Π½Π°Π»Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±ΠΈΡ‚Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ с уСбсайта с ΠΊΠΎΠ΄ base (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° клиСнтската част Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° β€” Π²ΠΈΠΆΡ‚Π΅ store_website):

function createNewItem($sku, $qty)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('inventory_source_item');
    $bind = [
        'source_code' => 'default',
        'sku' => $sku,
        'quantity' => $qty,
        'status' => MagentoInventoryApiApiDataSourceItemInterface::STATUS_IN_STOCK
    ];
    $conn->insert($table, $bind);
}

Π‘Π»Π΅Π΄ добавянСто Π½Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π΄Π°Π½Π½ΠΈ към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

МСдия

ΠŸΡ€ΠΈ "Ρ€ΡŠΡ‡Π½ΠΎ" добавянС Π½Π° изобраТСния към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΏΡ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° информация сС записва Π² слСднитС Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ:

  • catalog_product_entity_media_gallery: мСдийният Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ (изобраТСния ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅);
  • catalog_product_entity_media_gallery_value: ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Π΄ΠΈΠΈ с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ ΠΈ Π²ΠΈΡ‚Ρ€ΠΈΠ½ΠΈ (локализация);
  • catalog_product_entity_media_gallery_value_to_entity: ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅Π΄ΠΈΠΈ само с ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ (ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎ, ΠΌΠ΅Π΄ΠΈΠΉΠ½Π°Ρ‚Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°);
  • catalog_product_entity_varchar: Ρ‚ΡƒΠΊ сС Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ Ρ€ΠΎΠ»ΠΈΡ‚Π΅, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ;

Π° самитС изобраТСния сС Π·Π°ΠΏΠ°Π·Π²Π°Ρ‚ Π² дирСктория ./pub/media/catalog/product/x/y/, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ x ΠΈ y β€” ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π΅ Π±ΡƒΠΊΠ²ΠΈ ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. НапримСр, Ρ„Π°ΠΉΠ» image.png трябва Π΄Π° бъдС Π·Π°ΠΏΠ°Π·Π΅Π½ ΠΊΠ°Ρ‚ΠΎ ./pub/media/catalog/product/i/m/image.png, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ описаниСто Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

РСгистрирамС разполоТСния ΠΌΠ΅Π΄ΠΈΠ° Ρ„Π°ΠΉΠ» Π² ./pub/media/catalog/product/ мСдия Ρ„Π°ΠΉΠ» (самият процСс Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»Π° Π² Ρ‚Π°Π·ΠΈ статия Π½Π΅ Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π½):

function createMediaGallery($imgPathPrefixed)
{
    $attrId = \/** get attribute ID by attribute code 'media_gallery' *\/ 
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery');
    $bind = [
        'attribute_id' => $attrId,
        'value' => $imgPathPrefixed,
        \/* 'image' or 'video' *\/ 
        'media_type' => 'image',
        'disabled' => false
    ];
    $conn->insert($table, $bind);
    $result = $conn->lastInsertId($table);
    return $result;
}

ΠŸΡ€ΠΈ рСгистрация Π½Π° Π½ΠΎΠ² ΠΌΠ΅Π΄ΠΈΠ° Ρ„Π°ΠΉΠ», ΠΌΡƒ сС присвоява ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€.

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ рСгистрирания ΠΌΠ΅Π΄ΠΈΠ° Ρ„Π°ΠΉΠ» с отговарящия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π·Π° Π²ΠΈΡ‚Ρ€ΠΈΠ½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

function createGalleryValue($mediaId, $prodId)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery_value');
    $bind = [
        'value_id' => $mediaId,
        \/* use admin store view by default *\/ 
        'store_id' => 0,
        'entity_id' => $prodId,
        'label' => null,
        \/* we have one only image *\/ 
        'position' => 1,
        'disabled' => false
    ];
    $conn->insert($table, $bind);
}

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ рСгистрирания ΠΌΠ΅Π΄ΠΈΠ΅Π½ Ρ„Π°ΠΉΠ» с ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π±Π΅Π· ΠΏΡ€ΠΈΠ²Ρ€ΡŠΠ·ΠΊΠ° към ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΌΠ°Π³Π°Π·ΠΈΠ½. НС Π΅ ясно къдС Ρ‚ΠΎΡ‡Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π·Π°Ρ‰ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠ±Ρ€ΡŠΡ‰Π° към Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½ΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ Π΄Π°Π½Π½ΠΈ Π² нСя сС записват ΠΏΡ€ΠΈ добавянС Π½Π° снимка към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π—Π°Ρ‚ΠΎΠ²Π° Π΅ Ρ‚Π°ΠΊΠ°.

function createGalleryValueToEntity($mediaId, $prodId)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery_value_to_entity');
    $bind = [
        'value_id' => $mediaId,
        'entity_id' => $prodId
    ];
    $conn->insert($table, $bind);
}

catalog_product_entity_varchar

ΠœΠ΅Π΄ΠΈΠΉΠ½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€ΠΎΠ»ΠΈ (ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΅ Π² скобитС):

  • Base (image)
  • Small Image (small_image)
  • Thumbnail (thumbnail)
  • Swatch Image (swatch_image)

ΠŸΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€ΠΎΠ»ΠΈΡ‚Π΅ към мСдиСния Ρ„Π°ΠΉΠ» става Ρ‚ΠΎΡ‡Π½ΠΎ Π² catalog_product_entity_varchar. ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π½Π° ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π» "Основни Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Β«.

Π‘Π»Π΅Π΄ добавянС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ към ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ°Ρ‚Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΅Ρ‚ΠΎ Ρ‚Π°ΠΊΠ°:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

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

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅:

  • catalog_category_entity: Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅;
  • catalog_category_product: Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ;
  • catalog_category_entity_*: стойности Π½Π° EAV-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ;

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Π² ΠΏΡ€Π°Π·Π½ΠΎ Magento ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΈΠΌΠ° 2 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (ΡΡŠΠΊΡ€Π°Ρ‚ΠΈΠ» съм ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅: crt β€” created_at, upd β€” updated_at):

entity_id|attribute_set_id|parent_id|crt|upd|path|position|level|children_count|
---------|----------------|---------|---|---|----|--------|-----|--------------|
        1|               3|        0|...|...|1   |       0|    0|             1|
        2|               3|        1|...|...|1\/2 |       1|    1|             0|

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡΡ‚Π° с id=1 Π΅ ΠΊΠΎΡ€Π΅Π½ΡŠΡ‚ Π½Π° цСлия Magento ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π½ΠΈΡ‚ΠΎ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ°Ρ‚Π°, Π½ΠΈΡ‚ΠΎ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°. ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡΡ‚Π° с id=2 (Default Category) Π΅ ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π° катСгория Π·Π° основния ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π° основния сайт (Main Website Store), създаван ΠΏΡ€ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π²ΠΆ. Admin / Stores / All Stores). Π‘Π°ΠΌΠ°Ρ‚Π° ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π° катСгория Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΡΡŠΡ‰ΠΎ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°, само Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

Въй ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ статия всС ΠΏΠ°ΠΊ Π΅ внос Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, няма Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ пряко записванС Π² Π±Π°Π·Π°Ρ‚Π° ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, Π° Ρ‰Π΅ сС възползвам ΠΎΡ‚ класовСтС, прСдоставяни ΠΎΡ‚ самата Magento (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ). ΠŸΡ€ΡΠΊΠΎΡ‚ΠΎ записванС Π² Π±Π°Π·Π°Ρ‚Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° вносимия ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ с катСгорията (ΡΡŠΠΎΡ‚Π½Π΅ΡΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° катСгорията става ΠΏΠΎ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅, ΠΏΡ€ΠΈ ΡΡŠΠΎΡ‚Π½Π΅ΡΠ΅Π½ΠΈΠ΅ сС ΠΈΠ·Π²Π»ΠΈΡ‡Π° id Π½Π° катСгорията):

function create($prodId, $catId)
{
    \/** @var MagentoFrameworkAppResourceConnection $this->resource *\/ 
    \/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/ 
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_category_product');
    $bind = [
        'category_id' => $catId,
        'product_id' => $prodId,
    ];
    $conn->insert($table, $bind);
}

Π‘Π»Π΅Π΄ добавянСто Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ Β«ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1Β» ΠΈ Β«ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2Β» Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ дСйствия

Π‘Π»Π΅Π΄ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ слСднитС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ дСйствия:

  • индСксиранС Π½Π° Π΄Π°Π½Π½ΠΈ: ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° .\/bin\/magento indexer:reindex;
  • Ρ€Π΅Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° URL адрСси Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ\/ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Β«elgentos\/regenerate-catalog-urlsΒ«

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° слСд изпълнСниС Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ дСйствия:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

ΠΈ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°:

Magento 2: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

РСзюмС

Π‘ΡŠΡ‰ΠΈΡΡ‚ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ (10 броя), ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия, сС внася ΠΏΠΎΠ½Π΅ с ΠΏΠΎΡ€ΡΠ΄ΡŠΠΊ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ (1 сСкунда срСщу 10). Π—Π° ΠΏΠΎ-Ρ‚ΠΎΡ‡Π½Π° ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° скоростта Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ-голямо количСство ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ β€” няколко стотин, Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ хиляди. ВсС ΠΏΠ°ΠΊ, Π΄ΠΎΡ€ΠΈ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΡŠΠ² малък Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·Π²ΠΎΠ΄, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° инструмСнтариума, прСдоставян ΠΎΡ‚ Magento (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ), Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°ΠΌ β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ!) ускорява Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° нСобходимия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», Π½ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°ΠΌ β€” Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ!) намалява скоростта Π½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Π±Π°Π·Π°Ρ‚Π°.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π²ΠΎΠ΄Π°Ρ‚Π° сС ΠΎΠΊΠ°Π·Π° ΠΌΠΎΠΊΡ€Π° ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΠ΅. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, сСга ΠΈΠΌΠ°ΠΌ ΠΊΠΎΠ΄, с ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° СкспСримСнтирам ΠΈ, възмоТно, Π΄Π° направя ΠΏΠΎ-интСрСсни ΠΈΠ·Π²ΠΎΠ΄ΠΈ.

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster