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

เด‰เตฝเดชเตเดชเดจเตเดจ เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเตฝ เด’เดฐเต เดŽเตปเดŸเตเดฐเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดตเดฟเดตเดฐเด™เตเด™เตพ:

  • attribute_set_id
  • sku

เด…เดงเดฟเด•:

  • type_id - เดžเด™เตเด™เตพ เด…เดคเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, 'เดฒเดณเดฟเดคเด‚' เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดŽเดดเตเดคเดพเตป, เดžเดพเตป Magento-เดฏเตเดŸเต† DB เด…เดกเดพเดชเตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต:

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: เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด•

เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ เดกเดพเดฑเตเดฑ

Magento-เดฏเดฟเดฒเต† เดชเดคเดฟเดชเตเดชเต 2.3 เดฎเตเดคเตฝ, เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ เดตเดฟเดตเดฐเด™เตเด™เดณเตเดŸเต† (เด‰เตฝเดชเตเดชเดจเตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดณเดตเต) เดธเด‚เดญเดฐเดฃเด‚ เดจเตฝเด•เตเดจเตเดจ เดฐเดฃเตเดŸเต เดธเดฎเดพเดจเตเดคเดฐ เดชเดŸเตเดŸเดฟเด•เด•เตพ เด‰เดฃเตเดŸเต:

  • cataloginventory_*: เดชเดดเดฏ เด˜เดŸเดจ;
  • inventory_*: เดชเตเดคเดฟเดฏ เด˜เดŸเดจ (MSI - เดฎเตพเดŸเตเดŸเดฟ เดธเต‹เดดเตเดธเต เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ);

เดฐเดฃเตเดŸเต เด˜เดŸเดจเด•เดณเดฟเดฒเต‡เด•เตเด•เตเด‚ เดจเดฟเด™เตเด™เตพ เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ เดกเดพเดฑเตเดฑ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด•เดพเดฐเดฃเด‚ เดชเตเดคเดฟเดฏ เด˜เดŸเดจ เด‡เดคเตเดตเดฐเต† เดชเดดเดฏเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ (เด…เดคเดฟเดจเต เดตเดณเดฐเต† เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต default เดชเตเดคเดฟเดฏ เด˜เดŸเดจเดฏเดฟเตฝ เด’เดฐเต เดŸเต‡เดฌเดฟเตพ เด‰เตพเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเต†เดฏเตผเดนเต—เดธเต cataloginventory_stock_status เดชเต‡เดพเดฒเต† inventory_stock_1).

เด•เดพเดฑเตเดฑเดฒเต‹เด—เต เด‡เตปเดตเต†เดจเตเดฑเดฑเดฟ_

เดฎเดพเด—เตเดจเต†เดฑเตเดฑเต‹ 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        |...|

เดชเดฟเดจเตเดจเต† เด’เดจเตเดจเต "เดตเต†เดฏเตผเดน house เดธเต"(inventory_stock):

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

ยซเด‰เดฑเดตเดฟเดŸเด‚ยป เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพเด•เตเด•เดพเดฏเตเดณเตเดณ เดซเดฟเดธเดฟเด•เตเด•เตฝ เดธเตเดฑเตเดฑเต‹เดฑเต‡เดœเดฟเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต (เดฐเต‡เด–เดฏเดฟเตฝ เดซเดฟเดธเดฟเด•เตเด•เตฝ เด•เต‹เตผเดกเดฟเดจเต‡เดฑเตเดฑเตเด•เดณเตเด‚ เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เต เดตเดฟเดฒเดพเดธเดตเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต). "เดตเต†เดฏเตผเดน house เดธเต"เดจเดฟเดฐเดตเดงเดฟ "เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เดณเตเดŸเต†" เด’เดฐเต เดฒเต‹เดœเดฟเด•เตเด•เตฝ เดฏเต‚เดฃเดฟเดฏเดจเดพเดฃเต (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).

เด’เดจเตเดจเต "เดตเต†เดฏเตผเดน house เดธเต"เดชเดฒเดคเดฟเดฒเต‡เด•เตเด•เต เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเดพเด‚"เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ"เดชเดฟเดจเตเดจเต† เด’เดจเตเดจเต "เด‰เดฑเดตเดฟเดŸเด‚"- เดชเดฒเดคเดฟเดฒเต‡เด•เตเด•เต"เดธเด‚เดญเดฐเดฃเดถเดพเดฒเด•เตพ"(เดจเดฟเดฐเดตเดงเดฟ-เดชเดฒ เดฌเดจเตเดงเด‚). เด’เดดเดฟเดตเดพเด•เตเด•เดฒเตเด•เตพ เดกเดฟเดซเต‹เตพเดŸเตเดŸเดพเดฃเต "เด‰เดฑเดตเดฟเดŸเด‚"เด•เต‚เดŸเดพเดคเต†"เดตเต†เดฏเตผเดน house เดธเต". เด…เดต เดฎเดฑเตเดฑเต เดŽเดจเตเดฑเดฟเดฑเตเดฑเดฟเด•เดณเตเดฎเดพเดฏเดฟ เดตเต€เดฃเตเดŸเตเด‚ เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเดฟเดฒเตเดฒ (เด•เต‹เดกเต เดคเดฒเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเดฐเดฟเดฎเดฟเดคเดฟ - เดชเดฟเดถเด•เต "เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดธเต‹เดดเตเดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดธเตเดฑเตเดฑเต‹เด•เตเด•เต เดŽเดจเตเดจเดฟเดตเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดฒเดฟเด™เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ"). Magento 2 เดฒเต† MSI เด˜เดŸเดจเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเด‚ "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_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 เด‰เดณเตเดณ เดตเดฟเดญเดพเด—เด‚ (เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดตเดฟเดญเดพเด—เด‚เดชเตเดฐเดงเดพเดจ เดธเตˆเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดธเตเดฑเตเดฑเต‹เดฑเดฟเดจเตเดฑเต† เดฑเต‚เดŸเตเดŸเต เดตเดฟเดญเดพเด—เดฎเดพเดฃเต (เดชเตเดฐเดงเดพเดจ เดตเต†เดฌเตเดธเตˆเดฑเตเดฑเต เดธเตเดฑเตเดฑเต‹เตผ) เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต (เด•เดพเดฃเตเด•. เด…เดกเตเดฎเดฟเตป / เดธเตเดฑเตเดฑเต‹เดฑเตเด•เตพ / เดŽเดฒเตเดฒเดพ เดธเตเดฑเตเดฑเต‹เดฑเตเด•เดณเตเด‚). เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดธเตเดฑเตเดฑเต‹เดฑเดฟเดจเตเดฑเต† เดฑเต‚เดŸเตเดŸเต เดตเดฟเดญเดพเด—เดตเตเด‚ เดฎเตเตปเดตเดถเดคเตเดคเต เดฒเดญเตเดฏเดฎเดฒเตเดฒ, เด…เดคเดฟเดจเตเดฑเต† เด‰เดชเดตเดฟเดญเดพเด—เด™เตเด™เตพ เดฎเดพเดคเตเดฐเด‚.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดทเดฏเด‚ เด‡เดชเตเดชเต‹เดดเตเด‚ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เดณเดฟเตฝ เดกเดพเดฑเตเดฑ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดตเดฟเดญเดพเด—เด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเดพเตป เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดŽเตปเดŸเตเดฐเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ 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-urlยซ

เด…เดงเดฟเด• เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเดฟเดฏเดคเดฟเดจเต เดถเต‡เดทเด‚ เด…เดกเตเดฎเดฟเตป เดชเดพเดจเดฒเดฟเดฒเต† เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ:

Magento 2: เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด•

เดฎเตเตปเดตเดถเดคเตเดคเตเด‚:

Magento 2: เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเด•

เดธเด‚เด—เตเดฐเดนเด‚

เดฎเตเดฎเตเดชเดคเตเดคเต† เดฒเต‡เด–เดจเดคเตเดคเดฟเดฒเต† เด…เดคเต‡ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ (10 เด•เดทเดฃเด™เตเด™เตพ) เด•เตเดฑเดžเตเดžเดคเต เด’เดฐเต เด•เตเดฐเดฎเด‚ เดตเต‡เด—เดคเตเดคเดฟเตฝ เด‡เดฑเด•เตเด•เตเดฎเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต (1 เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เดจเดฟเดจเตเดจเต 10). เดตเต‡เด—เดค เด•เต‚เดŸเตเดคเตฝ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เด‰เตฝเดชเตเดชเดจเตเดจเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต - เดจเต‚เดฑเตเด•เดฃเด•เตเด•เดฟเดจเต, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด†เดฏเดฟเดฐเด•เตเด•เดฃเด•เตเด•เดฟเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดคเตเดฐเดฏเตเด‚ เดšเต†เดฑเดฟเดฏ เด…เดณเดตเดฟเดฒเตเดณเตเดณ เด‡เตปเดชเตเดŸเตเดŸเต เดกเดพเดฑเตเดฑ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, Magento (เดฎเต‹เดกเดฒเตเด•เดณเตเด‚ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เดณเตเด‚) เดจเตฝเด•เตเดจเตเดจ เด‰เดชเด•เดฐเดฃเด™เตเด™เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เด‚ เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตผเดนเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเดฟเด—เดฎเดจเด‚ เดšเต†เดฏเตเดฏเดพเด‚ (เดžเดพเตป เดŠเดจเตเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเต - เดตเดณเดฐเต†!) เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเด•เดธเดจเด‚ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเด•, เดŽเดจเตเดจเดพเตฝ เด…เดคเต‡ เดธเดฎเดฏเด‚ เด—เดฃเตเดฏเดฎเดพเดฏเดฟ (เดžเดพเตป เดŠเดจเตเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเต - เดตเดณเดฐเต†!) เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดตเต‡เด—เดค เด•เตเดฑเดฏเตเด•เตเด•เตเด•.

เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดตเต†เดณเตเดณเด‚ เดจเดจเดตเตเดณเตเดณเดคเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เด‡เดคเต เด’เดฐเต เดตเต†เดณเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเดฒเตเดฒ. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เด‡เดชเตเดชเต‹เตพ เดŽเดจเดฟเด•เตเด•เต เด•เดณเดฟเด•เตเด•เดพเตป เด•เต‹เดกเต เด‰เดฃเตเดŸเต, เด’เดฐเตเดชเด•เตเดทเต‡ เด•เต‚เดŸเตเดคเตฝ เดฐเดธเด•เดฐเดฎเดพเดฏ เดšเดฟเดฒ เดจเดฟเด—เดฎเดจเด™เตเด™เดณเดฟเตฝ เดŽเดคเตเดคเดฟเดšเตเดšเต‡เดฐเดพเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com