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

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

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

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

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

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

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

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

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

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

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

Основна информация Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² catalog_product_entity:

CREATE TABLE `catalog_product_entity` (
  `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity Id',
  `attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attribute Set ID',
  `type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
  `sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
  `has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Has Options',
  `required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Required Options',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation Time',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
  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 β€” Π°ΠΊΠΎ Π½Π΅ Π³ΠΎ посочим, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° β€žΠΏΡ€ΠΎΡΡ‚ΠΎβ€œ.

Π—Π° Π΄Π° пиша Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ 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 става Π²ΠΈΠ΄ΠΈΠΌΠ° Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Π°Ρ‚Π° ΠΌΡ€Π΅ΠΆΠ° (ΠšΠ°Ρ‚Π°Π»ΠΎΠ³/ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ).

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

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

public function create($prodId, $attrCode, $attrValue)
{
    $attrId = /* get attribute ID by attribute code */
    $attrType = /* get attribute type [datetime|decimal|int|text|varchar]) by attribute code */
    if ($attrId) {
        /** @var MagentoFrameworkAppResourceConnection $this->resource */
        /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
        $conn = $this->resource->getConnection();
        $tblName = 'catalog_product_entity_' . $attrType;
        $table = $this->resource->getTableName($tblName);
        $bind = [
            'attribute_id' => $attrId,
            'entity_id' => $prodId,
            /* put all attributes to default store view with id=0 (admin) */
            'store_id' => 0,
            'value' => $attrValue
        ];
        $conn->insert($table, $bind);
    }
}

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

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

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

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

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

  • cataloginventory_*: стара конструкция;
  • inventory_*: Π½ΠΎΠ²Π° структура (MSI - Multi Source Inventory);

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

ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€_

ΠŸΡ€ΠΈ внСдряванСто Π½Π° Magneto 2.3 ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ 2 записа store_website, ΠΊΠΎΠ΅Ρ‚ΠΎ отговаря Π½Π° Π΄Π²Π° сайта - административСн ΠΈ основСн ΠΊΠ»ΠΈΠ΅Π½Ρ‚:

website_id|code |name        |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
         0|admin|Admin       |         0|               0|         0|
         1|base |Main Website|         0|               1|         1|

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

stock_id|website_id|stock_name|
--------|----------|----------|
       1|         0|Default   |

ВоСст Π² старата Π½ΠΈ структура ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ β€žΡΠΊΠ»Π°Π΄β€œ (stock) ΠΈ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ към административния уСбсайт. ДобавянС Π½Π° Π½ΠΎΠ²ΠΈ ΠΏΡ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° sources/stocks Π² MSI (Π½ΠΎΠ²Π° структура) Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π½ΠΎΠ²ΠΈ записи Π² cataloginventory_stock.

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

  • cataloginventory_stock_item
  • cataloginventory_stock_status

ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³_ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€_сток_Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ»

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

ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³_ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅_наличност_наличност

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|

БъдСйки ΠΏΠΎ структурата Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, сС ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π°, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ само Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° β€žΠ½Π°Π»ΠΈΡ‡Π½ΠΎΡΡ‚"-"уСбсайт"(Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към уСбсайта слСдва ΠΊΠΎΠ΄Π° Π½Π° уСбсайта - base).

Π΅Π΄ΠΈΠ½ "склад"ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ с няколко"ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ"ΠΈ Π΅Π΄Π½ΠΎ "ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ"- Π΄ΠΎ няколко"складовС"(Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎ към ΠΌΠ½ΠΎΠ³ΠΎ). Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ‚Π° са ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ "ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ"И"склад". Π’Π΅ Π½Π΅ са ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ΄ - Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° β€žΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ запас ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅"). ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности Π·Π° структурата Π½Π° MSI Π² Magento 2 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² статията β€œΠ‘ΠΈΡΡ‚Π΅ΠΌΠ° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° склад, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰Π° CQRS ΠΈ Event Sourcing. Π”ΠΈΠ·Π°ΠΉΠ½".

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ конфигурацията ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‰Π΅ добавя цялата информация Π·Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π° към ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° default, ΠΊΠΎΠΉΡ‚ΠΎ участва Π² ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π°, ΡΠ²ΡŠΡ€Π·Π°Π½ с уСбсайта с ΠΊΠΎΠ΄Π° 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

МСдиСн Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€ΠΎΠ»ΠΈ (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π΅ посочСн Π² скоби):

  • Основа (image)
  • Малко ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (small_image)
  • ΠœΠΈΠ½ΠΈΠ°Ρ‚ΡŽΡ€Π° (thumbnail)
  • ΠœΠΎΡΡ‚Ρ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (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 (По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ) Π΅ основната катСгория Π·Π° основния ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π° основния сайт (ОсновСн ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π° уСбсайта), създадСни ΠΏΡ€ΠΈ внСдряванС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π²ΠΈΠΆΡ‚Π΅. Администратор / Магазини / Всички ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈ). ОсвСн Ρ‚ΠΎΠ²Π° основната катСгория Π½Π° самия ΠΌΠ°Π³Π°Π·ΠΈΠ½ ΡΡŠΡ‰ΠΎ Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° ΠΎΡ‚ΠΏΡ€Π΅Π΄, Π° само Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ.

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

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 (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°), Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°ΠΌ - ΠΌΠ½ΠΎΠ³ΠΎ!) ускорява Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°Ρ‚Π° функционалност, Π½ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ (ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°ΠΌ - ΠΌΠ½ΠΎΠ³ΠΎ!) намаляванС Π½Π° скоростта, с която Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π²Π»ΠΈΠ·Π°Ρ‚ Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Π²ΠΎΠ΄Π°Ρ‚Π° сС ΠΎΠΊΠ°Π·Π° ΠΌΠΎΠΊΡ€Π° ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½ΠΈΠ΅. Π‘Π΅Π³Π° ΠΎΠ±Π°Ρ‡Π΅ ΠΈΠΌΠ°ΠΌ ΠΊΠΎΠ΄Π°, с ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° си поиграя ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΄Π° стигна Π΄ΠΎ някои ΠΏΠΎ-интСрСсни Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

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