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": "Π—Π°ΠΏΡƒΡˆΠ°Π»ΠΊΠ° Π·Π° Π·Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π°Π½Π΅ ВА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`)
)

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

  • ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π°Π±ΠΎΡ€Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²
  • sku

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

  • ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ‚ΠΈΠΏΠ° β€” Π°ΠΊΠΎ Π½Π΅ посочим, Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° β€˜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 Ρ‚ΠΎΠΉ става Π²ΠΈΠ΄ΠΈΠΌ Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, Π² Π³Ρ€ΠΈΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΡ‚Π΅ (ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ / ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ).

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-Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ. Π•Ρ‚ΠΎ списък с основнитС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°:

  • ΠΈΠΌΠ΅
  • price
  • описаниС
  • ΠΊΡ€Π°Ρ‚ΠΊΠΎ_описаниС
  • статус
  • ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π΄Π°Π½ΡŠΡ‡Π½ΠΈΡ клас
  • url ΠΊΠ»ΡŽΡ‡
  • видимост

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

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, дСсСтичСн, int, ntext, varchar), слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° записвамС Π΄Π°Π½Π½ΠΈ Π·Π° административната Π²ΠΈΡ‚Ρ€ΠΈΠ½Π° (store_id = 0).

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

Magento 2: внасянС Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

Π˜Π½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π΄Π°Π½Π½ΠΈ

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

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

Врябва Π΄Π° добавятС ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π² Π΄Π²Π΅Ρ‚Π΅ структури, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° структура всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ напълно нСзависима ΠΎΡ‚ старата (ΠΌΠ½ΠΎΠ³ΠΎ Π΅ вСроятно, Ρ‡Π΅ Π·Π° default склада Π² Π½ΠΎΠ²Π°Ρ‚Π° структура Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° 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) ΠΈ Ρ‚ΠΎΠΉ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с административния сайт. ДобавянСто Π½Π° Π½ΠΎΠ²ΠΈ sources/stocks Π² 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,
        /* Π² 'cataloginventory' структура ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ склад ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ */
        'stock_id' => 1,
        'qty' => $qty,
        'is_qty_decimal' => $isQtyDecimal,
        'is_in_stock' => $isInStock,
        /* ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΡΠΊΠ»Π°Π΄ΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с административния сайт (Π²ΠΈΠΆΡ‚Π΅ `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,
        /* Π² 'cataloginventory' структура ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ само Π΅Π΄ΠΈΠ½ склад ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ */
        'stock_id' => 1, 
        'qty' => $qty,
        'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
        /* ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΡΠΊΠ»Π°Π΄ΡŠΡ‚ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ с административния сайт (Π²ΠΈΠΆΡ‚Π΅ `cataloginventory_stock`) */
        'website_id' => 0 
    ];
    $conn->insert($table, $bind);
}

inventory_

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

source_code|name          |enabled|description   |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default    |ОсновСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ|      1|ОсновСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ|0.000000| 0.000000|БАЩ      |...|

и Сдин «склад» (inventory_stock):

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

Β«Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» Π΅ физичСско Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ (записитС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ физичСски ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΈ ΠΈ пощСнски адрСс). Β«Π‘ΠΊΠ»Π°Π΄Β» Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° няколко Β«ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°Β» (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).

Π•Π΄ΠΈΠ½ «склад» ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ с няколко Β«ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°Β«, Π° Π΅Π΄ΠΈΠ½ Β«ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» β€” с няколко «склада» (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Β«ΠΌΠ½ΠΎΠ³ΠΎ-Π΄ΠΎ-ΠΌΠ½ΠΎΠ³ΠΎΒ»). Π˜Π·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ са Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΈΡ‚Π΅ Β«ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΒ» ΠΈ «склад«. Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ прСнастроСни към Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΡ‰Π½ΠΎΡΡ‚ΠΈ (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ΄ β€” ΠΈΠ·Π»ΠΈΠ·Π° Π³Ρ€Π΅ΡˆΠΊΠ° «МоТС Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠ°, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Π”Π΅Ρ„ΠΎΠ»Ρ‚Π΅Π½ Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ ΠΈΠ»ΠΈ Π”Π΅Ρ„ΠΎΠ»Ρ‚Π΅Π½ Π‘ΠΊΠ»Π°Π΄Β«). По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π° структурата Π½Π° MSI Π² Magento 2 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² статията «БистСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° склада с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° CQRS ΠΈ Event Sourcing. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Β«.

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ конфигурацията ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Ρ‰Π΅ добавя цялата информация Π·Π° ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€Π° Π² ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ° default, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½ Π² ΠΊΠ°Π½Π°Π»Π° Π·Π° ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ±Π°, ΡΠ²ΡŠΡ€Π·Π°Π½ с уСбсайта с ΠΊΠΎΠ΄ base (ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° клиСнтската част Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° β€” Π²ΠΈΠΆte. 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: ΠΌΠ΅Π΄ΠΈΠΉΠ½ register (изобраТСния ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅);
  • 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 = /* ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎ ΠΊΠΎΠ΄ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° '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' ΠΈΠ»ΠΈ 'video' */
        'media_type' => 'image',
        'disabled' => false
    ];
    $conn->insert($table, $bind);
    $result = $conn->lastInsertId($table);
    return $result;
}

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

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

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,
        /* ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ администраторска Π²ΠΈΡ‚Ρ€ΠΈΠ½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ */
        'store_id' => 0,
        'entity_id' => $prodId,
        'label' => null,
        /* ΠΈΠΌΠ°ΠΌΠ΅ само Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ */
        '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

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

  • ОсновСн (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)
  • Малко ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (small_image)
  • Π’ thumbnail (thumbnail)
  • Swatch ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (swatch_image)

ΠŸΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€ΠΎΠ»ΠΈΡ‚Π΅ към мСдийния Ρ„Π°ΠΉΠ» сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‚ΠΎΡ‡Π½ΠΎ Π² catalog_product_entity_varchar. ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π½Π° ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π° β€žΠžΡΠ½ΠΎΠ²Π½ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Β«.

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

Magento 2: внасянС Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°

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

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

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

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ, Π² ΠΏΡ€Π°Π·Π½ΠΎ Magento ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² рСгистра Π½Π° ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈΡ‚Π΅ ΠΈΠΌΠ° 2 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ (ΡΡŠΠΊΡ€Π°Ρ‚ΠΈΠ» съм ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅: crt β€” created_at, ΡŠΠΏΠ΄Π΅ΠΉΡ‚ β€” 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 (Основна катСгория) Π΅ ΠΊΠΎΡ€Π΅Π½ΠΎΠ²Π°Ρ‚Π° катСгория Π·Π° основния ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π° основния сайт (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