Magento 2: αž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™

Π’ αž’αžαŸ’αžαž”αž‘αž˜αž»αž“ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αž‘αŸ…αž€αŸ’αž“αž»αž„ Magento 2 αžαžΆαž˜αžœαž·αž’αžΈαž’αž˜αŸ’αž˜αžαžΆ - αžαžΆαž˜αžšαž™αŸˆαž˜αŸ‰αžΌαžŠαŸ‚αž› αž“αž·αž„αžƒαŸ’αž›αžΆαŸ†αž„αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž’αž˜αŸ’αž˜αžαžΆαž˜αžΆαž“αž›αŸ’αž”αžΏαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαž”αž”αŸ†αž•αž»αžαŸ” αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšβ€‹αž™αž½αžšβ€‹αžŠαŸƒβ€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž‰αž»αŸ†β€‹αž€αŸ†αž–αž»αž„β€‹αž•αž›αž·αžβ€‹αž•αž›αž·αžαž•αž›β€‹αž˜αž½αž™β€‹αž€αŸ’αž“αž»αž„β€‹αž˜αž½αž™β€‹αžœαž·αž“αžΆαž‘αžΈαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆαžœαž·αž’αžΈαž‡αŸ†αž“αž½αžŸαžŠαžΎαž˜αŸ’αž”αžΈαž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αž˜αž½αž™ - αžŠαŸ„αž™αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ„αž™αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž™αž“αŸ’αžαž€αžΆαžšαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš Magento 2 (αž˜αŸ‰αžΌαžŠαŸ‚αž› αžšαŸ„αž„αž…αž€αŸ’αžš αžƒαŸ’αž›αžΆαŸ†αž„)αŸ” αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž‡αŸ†αž αžΆαž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαž”αž‘αŸ…αž“αžΉαž„αž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™ MySQL αŸ”

αž€αžΆαžšαž˜αž·αž“αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαŸ– Magento αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ αž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž αžΎαž™αž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αžœαžΆαž“αžΉαž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαž‰αž›αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž›αžΎαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αžΆαŸ†αž…αžΌαž› αž˜αž·αž“αž€αŸ†αžŽαžαŸ‹αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž―αž€αžŸαžΆαžš CSV αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αžΆαž“αž‘αŸ αžŸαžΌαž˜αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž˜αž€αž€αžΆαž“αŸ‹αž†αŸ’αž˜αžΆαŸ”

Magento 2: αž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™

αž€αžΌαžŠαžŠαŸ‚αž›αž€αžΎαžαž…αŸαž‰αž–αžΈαž€αžΆαžšαžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž‘αžΆαŸ†αž„αž–αžΈαžšαž’αžΆαž…αž˜αžΎαž›αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž› Magento "flacer32/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 as 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

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|

αžŠαŸ„αž™αžœαž·αž“αž·αž…αŸ’αž†αŸαž™αžαžΆαž˜αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž”αžŽαŸ’αžαžΆαž‰αž›αž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž“αŸ’αž˜αžαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž˜αžΆαž“αžαŸ‚αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ "αž—αžΆαž‚αž αŸŠαž»αž“"-"αž‚αŸαž αž‘αŸ†αž–αŸαžš"(αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαž’αŸ’αžœαžΎαžαžΆαž˜αž€αžΌαžŠαž‚αŸαž αž‘αŸ†αž–αŸαžš - base).

αž˜αž½αž™ "αžƒαŸ’αž›αžΆαŸ†αž„"αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž‡αžΆαž…αŸ’αžšαžΎαž“"αž”αŸ’αžšαž—αž–"αž“αž·αž„αž˜αž½αž™"αž”αŸ’αžšαž—αž–"- αž‘αŸ…αž‡αžΆαž…αŸ’αžšαžΎαž“"αžƒαŸ’αž›αžΆαŸ†αž„"(αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž…αŸ’αžšαžΎαž“αž‘αŸ…αž…αŸ’αžšαžΎαž“)αŸ” αž€αžΆαžšαž›αžΎαž€αž›αŸ‚αž„αž‚αžΊαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ "αž”αŸ’αžšαž—αž–"αž αžΎαž™"αžƒαŸ’αž›αžΆαŸ†αž„"αŸ” αž–αž½αž€αž‚αŸαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αžΎαž„αžœαž·αž‰αž‡αžΆαž˜αž½αž™αž’αž„αŸ’αž‚αž—αžΆαž–αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸ (αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž€αžΌαžŠ - αž€αŸ†αž αž»αžŸ "αž˜αž·αž“αž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ†αžŽαžŠαŸ‚αž›αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž”αŸ’αžšαž—αž–αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž¬αž—αžΆαž‚αž αŸŠαž»αž“αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž”αžΆαž“αž‘αŸαŸ”") αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ MSI αž“αŸ…αž€αŸ’αž“αž»αž„ Magento 2 αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘ "αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžƒαŸ’αž›αžΆαŸ†αž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ CQRS αž“αž·αž„αž”αŸ’αžšαž—αž–αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαŸ” αžšαž…αž“αžΆ"αŸ”

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž–αŸαžαŸŒαž˜αžΆαž“αžŸαžΆαžšαž–αžΎαž—αŸαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž”αŸ’αžšαž—αž– 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 (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 αž‘αžΆαŸ†αž„αž˜αžΌαž› αž αžΎαž™αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ αž¬αž“αŸ…αž‘αŸ†αž–αŸαžšαž˜αž»αžαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹ = 2 (αž”αŸ’αžšαž—αŸαž‘αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜) αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘ root αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αžΆαž„αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžš (αž αžΆαž„αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŸαŸ†αžαžΆαž“αŸ‹) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ (αžŸαžΌαž˜αž˜αžΎαž›αŸ” αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ / αž αžΆαž„ / αž αžΆαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”) αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž”αŸ’αžšαž—αŸαž‘ root αž“αŸƒαž αžΆαž„αžαŸ’αž›αž½αž“αžœαžΆαž€αŸαž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αž»αžαžŠαŸ‚αžš αž˜αžΆαž“αžαŸ‚αž”αŸ’αžšαž—αŸαž‘αžšαž„αžšαž”αžŸαŸ‹αžœαžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžŠαŸ„αž™αžŸαžΆαžšαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αŸ…αžαŸ‚αž“αžΆαŸ†αž…αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž›αžΎαž•αž›αž·αžαž•αž› αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž”αŸ’αžšαžΎαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαž—αŸαž‘αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αžΉαž„αž”αŸ’αžšαžΎαžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ 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;
  • αž”αž„αŸ’αž€αžΎαž URLs αž‘αžΎαž„αžœαž·αž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž›αž·αžαž•αž›/αž”αŸ’αžšαž—αŸαž‘αŸ– αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ β€œelgentos/regenerate-catalog-urlsΒ«

αž•αž›αž·αžαž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αž“αž»αžœαžαŸ’αžαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž”αž“αŸ’αžαŸ‚αž˜αŸ–

Magento 2: αž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™

αž αžΎαž™αž“αŸ…αžαžΆαž„αž˜αž»αžαŸ–

Magento 2: αž“αžΆαŸ†αž…αžΌαž›αž•αž›αž·αžαž•αž›αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™

αžŸαž„αŸ’αžαŸαž”

αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž•αž›αž·αžαž•αž›αžŠαžΌαž…αž‚αŸ’αž“αžΆ (10 αž”αŸ†αžŽαŸ‚αž€) αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž˜αž»αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αžΆαŸ†αž…αžΌαž›αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαžšαŸ‰αž·αž…αž‘αŸαžšαž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“ (1 αžœαž·αž“αžΆαž‘αžΈαž’αŸ€αž”αž“αžΉαž„ 10) αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ‰αžΆαž“αŸ‹αž”αŸ’αžšαž˜αžΆαžŽαž›αŸ’αž”αžΏαž“αž€αžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αž›αž·αžαž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ† - αžšαžΆαž”αŸ‹αžšαž™ αž¬αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αžšαžΆαž”αŸ‹αž–αžΆαž“αŸ‹αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž‘αŸ†αž αŸ†αžαžΌαž…αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž”αž‰αŸ’αž…αžΌαž›αž€αŸαžŠαŸ„αž™ αž™αžΎαž„αž’αžΆαž…αžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αžαžΆαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™ Magento (αž˜αŸ‰αžΌαžŠαŸ‚αž› αž“αž·αž„αžƒαŸ’αž›αžΆαŸ†αž„) αž‚αžΊαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹ (αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αž€αžαŸ‹αž’αŸ’αž„αž“αŸ‹ - αž…αŸ’αžšαžΎαž“!) αž”αž„αŸ’αž€αžΎαž“αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹ (αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αž€αžαŸ‹αž’αŸ’αž„αž“αŸ‹ - αž…αŸ’αžšαžΎαž“!) αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž›αŸ’αž”αžΏαž“αžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž‘αžΉαž€αž”αŸ’αžšαŸ‚αž‡αžΆαžŸαžΎαž˜ αž αžΎαž™αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžœαž·αžœαžšαžŽαŸˆαž‘αŸαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž›αŸαžαž€αžΌαžŠαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αŸαž„αž‡αžΆαž˜αž½αž™ αž αžΎαž™αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹