Π ΠΎΠΏΠΈΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ Π² Magento 2 ΠΏΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ Π½Π°ΡΠΈΠ½ β ΡΡΠ΅Π· ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄ΠΎΡΡΠ° Π½ΠΈΡΠΊΠ° ΡΠΊΠΎΡΠΎΡΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ° Π»Π°ΠΏΡΠΎΠΏΠ° ΠΌΠΈ ΠΈΠ·Π»ΠΈΠ·Π°ΡΠ΅ ΠΎΠΊΠΎΠ»ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ΄ΡΠΊΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. Π ΡΠΎΠ²Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡ β Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² Π±Π°Π·Π°ΡΠ°, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π½Π° Magento 2 (ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΡΠ°Π±ΡΠΈΠΊΠΈ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ). ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠΏΠΊΠΈΡΠ΅, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½Π° ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ, ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ MySQL.
ΠΡΠΊΠ°Π· ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ: Π Magento ΠΈΠΌΠ° Π³ΠΎΡΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ΅ Π²ΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ. ΠΠΎ Π°ΠΊΠΎ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΠΏΠΎ-ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° Π΄ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° CSV ΡΠ°ΠΉΠ» Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ Π΅ β Π΄ΠΎΠ±ΡΠ΅ Π΄ΠΎΡΠ»ΠΈ ΠΏΠΎΠ΄ ΠΊΠ°Ρ.

ΠΠΎΠ΄ΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠ»Π΅Π΄ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π΅ΡΠ΅ ΡΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π²ΠΈΠ΄ΡΠ½ Π² Magento ΠΌΠΎΠ΄ΡΠ»Π° ββ. ΠΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠΏΠ°Π·Π²Π°Ρ , Π·Π° Π΄Π° ΠΎΠΏΡΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π½Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»:
- ΠΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ ΡΠ°ΠΌΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ, Π½Π΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ.
- ΠΠ΄Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
- ΠΠΌΠΏΠΎΡΡΠΈΡΠ°Ρ ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅, Π±Π΅Π· ΡΡΡ Π½Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°
- Π‘ΡΡΡΠΊΡΡΡΠΈΡΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° Π²Π΅ΡΡΠΈΡ 2.3
JSON Π·Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΡΠΎΠ΄ΡΠΊΡ:
{
"sku": "MVA20D-UBV-3",
"name": "ΠΠ°ΠΏΡΡΠ°Π»ΠΊΠ° Π·Π° ΠΏΠ»ΠΎΠΌΠ±ΠΈΡΠ°Π½Π΅ VA47-29 IEK",
"desc": "ΠΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΡΠ° ...",
"desc_short": "ΠΠ°ΠΏΡΡΠ°Π»ΠΊΠ°ΡΠ° Π·Π° ΠΏΠ»ΠΎΠΌΠ±ΠΈΡΠ°Π½Π΅ VA47-29 IEK Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π·Π° ...",
"price": 5.00,
"qty": 25,
"categories": ["ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 1", "ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 2"],
"image_path": "mva20d_ubv_3.png"
}ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ°Π½Π΅
- ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ°ΠΌΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ
- Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠ°
- ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° (EAV)
- ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡ Π½Π° ΡΠΊΠ»Π°Π΄)
- ΠΌΠ΅Π΄ΠΈΠΈ (ΡΠ½ΠΈΠΌΠΊΠΈ)
- Π²ΡΡΠ·ΠΊΠ° Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² catalog_product_entity:
Π‘ΠͺΠΠΠΠΠ’Π Π’ΠΠΠΠΠ¦Π `catalog_product_entity` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΡΠ°',
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π½Π°Π±ΠΎΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΈ',
`type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΠΈΠΏΠ°',
`sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
`has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'ΠΠΌΠ° ΠΎΠΏΡΠΈΠΈ',
`required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'ΠΠ°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ ΠΎΠΏΡΠΈΠΈ',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'ΠΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'ΠΡΠ΅ΠΌΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅',
PRIMARY KEY (`entity_id`),
KEY `CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
KEY `CATALOG_PRODUCT_ENTITY_SKU` (`sku`)
)ΠΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅:
attribute_set_idsku
Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ:
type_idβ Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΠΎΡΠΈΠΌ, ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ βsimpleβ
ΠΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² Π±Π°Π·Π°ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ DB Π°Π΄Π°ΠΏΡΠ΅ΡΠ° Π½Π° ΡΠ°ΠΌΠ°ΡΠ° Magento:
function create($sku, $typeId, $attrSetId)
{
\/** @var MagentoFrameworkAppResourceConnection $this->resource *\/
\/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity');
$bind = [
'sku' => $sku,
'type_id' => $typeId,
'attribute_set_id' => $attrSetId
];
$conn->insert($table, $bind);
$result = $conn->lastInsertId($table);
return $result;
}Π‘Π»Π΅Π΄ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² catalog_product_entity ΡΠΎΠΉ ΡΡΠ°Π²Π° Π²ΠΈΠ΄ΠΈΠΌ Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, Π² ΡΠ΅ΡΠ΅ΡΠΊΠ°ΡΠ° Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ (Catalog / Products).

ΠΡΡΠ·ΠΊΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Ρ ΡΠ΅Π±ΡΠ°ΠΉΡΠ°
ΠΡΡΠ·ΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Ρ ΡΠ°ΠΉΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π² ΠΊΠΎΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΈ ΠΈ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈ Π²ΠΈΡΡΠΈΠ½ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° ΠΏΡΠ΅Π΄Π½Π°ΡΠ° ΡΠ°ΡΡ.
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);
}
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
ΠΡΠΈ Π½ΠΎΠ²ΠΎΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ ΠΏΡΠΎΠ΄ΡΠΊΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ ΠΈΠΌΠ΅, Π½ΠΈΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΡΡΠ°Π²Π° ΡΡΠ΅Π· . ΠΡΠΎ ΡΠΏΠΈΡΡΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡΠΎΠ΄ΡΠΊΡΡΡ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° ΠΏΡΠ΅Π΄Π½Π°ΡΠ° ΡΠ°ΡΡ:
namepricedescriptionshort_descriptionstatustax_class_idurl_keyvisibility
ΠΡΠ΄Π΅Π»Π΅Π½ Π°ΡΡΠΈΠ±ΡΡ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ (ΠΎΠΏΡΡΠ½Π°ΡΠΈ ΡΠ° Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈ ΡΠΈΠΏΠ° Π°ΡΡΠΈΠ±ΡΡ ΠΏΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄):
ΠΏΡΠ±Π»ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ create($prodId, $attrCode, $attrValue)
{
$attrId = /* ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅ ID Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° *
$attrType = /* ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅ΡΠ΅ ΡΠΈΠΏΠ° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° [datetime|decimal|int|text|varchar] ΠΏΠΎ ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° *02
Π°ΠΊΠΎ ($attrId) {
/** @var MagentoFrameworkAppResourceConnection $this->resource *02
/** @var MagentoFrameworkDBAdapterPdoMysql $conn *02
$conn = $this->resource->getConnection();
$tblName = 'catalog_product_entity_' . $attrType;
$table = $this->resource->getTableName($tblName);
$bind = [
'attribute_id' => $attrId,
'entity_id' => $prodId,
02/* ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½ Ρ id=0 (Π°Π΄ΠΌΠΈΠ½) *02
'store_id' => 0,
'value' => $attrValue
];
$conn->insert($table, $bind);
}
}Π§ΡΠ΅Π· ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠΈΠ±ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡ id ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΠΈ (datetime, decimal, int, text, varchar), ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π² ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½ (store_id = 0).
Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π³ΠΎΡΠ΅ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π° Π² Π°Π΄ΠΌΠΈΠ½ΡΠΊΠΈΡ ΠΏΠ°Π½Π΅Π»:

ΠΠ°Π½Π½ΠΈ Π·Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ°
Π‘ Π²Π΅ΡΡΠΈΠΈ 2.3 Π² Magento ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΡΠ°Π±Π»ΠΈΡΠΈ, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΡΠΈ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°):
cataloginventory_*: ΡΡΠ°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°;inventory_*: Π½ΠΎΠ²Π° ΡΡΡΡΠΊΡΡΡΠ° (MSI β ΠΡΠ»ΡΠΈ ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΠ½Π²Π΅Π½ΡΠ°Ρ);
ΠΠ°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΠ±Π°Π²ΡΠ½ΠΈ ΠΈ Π² Π΄Π²Π΅ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° ΠΎΡ ΡΡΠ°ΡΠ°ΡΠ° (ΠΌΠ½ΠΎΠ³ΠΎ Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ΅ Π·Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠΊΠ»Π°Π΄Π° Π² Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° cataloginventory_stock_status Π² ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° inventory_stock_1).
cataloginventory_
ΠΡΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° Magneto 2.3, ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ 2 Π·Π°ΠΏΠΈΡΠ° Π² store_website, ΠΊΠΎΠ΅ΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° Π΄Π²Π° ΡΠ°ΠΉΡΠ° β Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π΅Π½ ΠΈ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ:
website_id|code |name |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
0|admin|ΠΠ΄ΠΌΠΈΠ½ | 0| 0| 0|
1|base |ΠΡΠ½ΠΎΠ²Π΅Π½ ΡΠ°ΠΉΡ| 0| 1| 1|Π ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° cataloginventory_stock ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ Π·Π°ΠΏΠΈΡ:
stock_id|website_id|stock_name|
--------|----------|----------|
1| 0|ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ |Π’.Π΅., Π² ΡΡΠ°ΡΠ°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ βΡΠΊΠ»Π°Π΄β (stock) ΠΈ ΡΠΎΠΉ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΡΠ°ΠΉΡ. ΠΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ/ΡΠΊΠ»Π°Π΄ΠΈ Π² MSI (Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°) Π½Π΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° Π½ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² cataloginventory_stock.
ΠΠ°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΈΠ½Π²Π΅Π½ΡΠ°Ρ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ Π² ΡΡΠ°ΡΠ°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅:
cataloginventory_stock_itemcataloginventory_stock_status
cataloginventory_stock_item
function createOldItem($prodId, $qty)
{
$isQtyDecimal = (((int)$qty) != $qty);
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_item');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'is_qty_decimal' => $isQtyDecimal,
'is_in_stock' => $isInStock,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}cataloginventory_stock_status
function createOldStatus($prodId, $qty)
{
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_status');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠΈΠ·Π°ΡΠΈΡ_
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½ΠΎΠ²Π°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΡΡΠ΄ΡΡΠΆΠ° 1 βΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΒ» (inventory_source):
source_code|name |enabled|description |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default |Default Source| 1|Default Source|0.000000| 0.000000|US |...|ΠΈ Π΅Π΄ΠΈΠ½ βΡΠΊΠ»Π°Π΄Β» (inventory_stock):
stock_id|name |
--------|-------------|
1|Default Stock|Β«ΠΠ·ΡΠΎΡΠ½ΠΈΠΊΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ (Π·Π°ΠΏΠΈΡΡΡ ΡΡΠ΄ΡΡΠΆΠ° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈ Π°Π΄ΡΠ΅Ρ). βΠ‘ΠΊΠ»Π°Π΄Β» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ βΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°β (inventory_source_stock_link)
link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
1| 1|default | 1|Π½Π° Π½ΠΈΠ²ΠΎ, ΠΏΡΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΠΊΠ°Π½Π°Π»Π° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|Π‘ΡΠ΄Π΅ΠΉΠΊΠΈ ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π°, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π²ΡΡΠ·ΠΊΠ° βstockΒ«-Β«websiteΒ» (Π²ΡΡΠ·ΠΊΠ°ΡΠ° Ρ ΡΠ΅Π±ΡΠ°ΠΉΡ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΡΠ΅Π· ΠΊΠΎΠ΄Π° Π½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ° β base).
ΠΠ΄ΠΈΠ½ βΡΠΊΠ»Π°Π΄Β» ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΌΠ½ΠΎΠ³ΠΎ βΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΒ«, Π° Π΅Π΄ΠΈΠ½ βΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΒ» β Ρ ΠΌΠ½ΠΎΠ³ΠΎ βΡΠΊΠ»Π°Π΄ΠΈΒ» (ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ βΠΌΠ½ΠΎΠ³ΠΎ ΠΊΡΠΌ ΠΌΠ½ΠΎΠ³ΠΎβ). ΠΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΡΡ default ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ βΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΒ» ΠΈ βΡΠΊΠ»Π°Π΄Β«. Π’Π΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈ ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΊΠΎΠ΄ β Π²ΡΠ·Π½ΠΈΠΊΠ²Π° Π³ΡΠ΅ΡΠΊΠ° βCan not save link related to Default Source or Default Stockβ). ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° MSI Π² Magento 2 ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π² ΡΡΠ°ΡΠΈΡΡΠ° βΒ«.
Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΡΡΠ»Π°ΡΠ° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠΉΡΠΎ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ Π² ΠΊΠ°Π½Π°Π»Π° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ Ρ ΡΠ΅Π±ΡΠ°ΠΉΡΠ° Ρ ΠΊΠΎΠ΄ 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);
}Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π°:

ΠΠ΅Π΄ΠΈΡ
ΠΡΠΈ "ΡΡΡΠ½ΠΎ" Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΏΡΠ΅Π· Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π°, ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ:
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, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ ΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
catalog_product_entity_media_gallery
Π Π΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅Π΄ΠΈΠ° ΡΠ°ΠΉΠ» Π² ./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;
}ΠΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° Π½ΠΎΠ² ΠΌΠ΅Π΄ΠΈΠ° ΡΠ°ΠΉΠ», ΠΌΡ ΡΠ΅ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ.
catalog_product_entity_media_gallery_value
Π‘Π²ΡΡΠ·Π²Π°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈΡ ΠΌΠ΅Π΄ΠΈΠ° ΡΠ°ΠΉΠ» Ρ ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Π·Π° Π²ΠΈΡΡΠΈΠ½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅:
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);
}catalog_product_entity_media_gallery_value_to_entity
Π‘Π²ΡΡΠ·Π²Π°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈΡ ΠΌΠ΅Π΄ΠΈΠ΅Π½ ΡΠ°ΠΉΠ» Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Π±Π΅Π· ΠΏΡΠΈΠ²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΌΠ°Π³Π°Π·ΠΈΠ½. ΠΠ΅ Π΅ ΡΡΠ½ΠΎ ΠΊΡΠ΄Π΅ ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π·Π°ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΡΠ° ΠΊΡΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ°, Π½ΠΎ ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΈ Π΄Π°Π½Π½ΠΈ Π² Π½Π΅Ρ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ½ΠΈΠΌΠΊΠ° ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. ΠΠ°ΡΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠ°.
function createGalleryValueToEntity($mediaId, $prodId)
{
\/** @var MagentoFrameworkAppResourceConnection $this->resource *\/
\/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity_media_gallery_value_to_entity');
$bind = [
'value_id' => $mediaId,
'entity_id' => $prodId
];
$conn->insert($table, $bind);
}catalog_product_entity_varchar
ΠΠ΅Π΄ΠΈΠΉΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΠ»ΠΈ (ΠΊΠΎΠ΄ΡΡ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡ Π΅ Π² ΡΠΊΠΎΠ±ΠΈΡΠ΅):
- Base (
image) - Small Image (
small_image) - Thumbnail (
thumbnail) - Swatch Image (
swatch_image)
ΠΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ»ΠΈΡΠ΅ ΠΊΡΠΌ ΠΌΠ΅Π΄ΠΈΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ» ΡΡΠ°Π²Π° ΡΠΎΡΠ½ΠΎ Π² catalog_product_entity_varchar. ΠΠΎΠ΄ΡΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π½Π° ΠΊΠΎΠ΄Π° Π² ΡΠ°Π·Π΄Π΅Π» "ΠΡΠ½ΠΎΠ²Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Β«.
Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ°ΡΠ° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΅ΡΠΎ ΡΠ°ΠΊΠ°:

ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅:
catalog_category_entity: ΡΠ΅Π³ΠΈΡΡΡΡ Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅;catalog_category_product: Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ;catalog_category_entity_*: ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° EAV-Π°ΡΡΠΈΠ±ΡΡΠΈ;
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ, Π² ΠΏΡΠ°Π·Π½ΠΎ Magento ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΡΠ΅Π³ΠΈΡΡΡΡΠ° Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅ ΠΈΠΌΠ° 2 ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ (ΡΡΠΊΡΠ°ΡΠΈΠ» ΡΡΠΌ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅: crt β created_at, upd β updated_at):
entity_id|attribute_set_id|parent_id|crt|upd|path|position|level|children_count|
---------|----------------|---------|---|---|----|--------|-----|--------------|
1| 3| 0|...|...|1 | 0| 0| 1|
2| 3| 1|...|...|1\/2 | 1| 1| 0|ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Ρ id=1 Π΅ ΠΊΠΎΡΠ΅Π½ΡΡ Π½Π° ΡΠ΅Π»ΠΈΡ Magento ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΈ Π½Π΅ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½ΠΈΡΠΎ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ°ΡΠ°, Π½ΠΈΡΠΎ Π½Π° ΡΡΠΎΠ½ΡΠ°. ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Ρ id=2 (Default Category) Π΅ ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ°ΠΉΡ (Main Website Store), ΡΡΠ·Π΄Π°Π²Π°Π½ ΠΏΡΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (Π²ΠΆ. Admin / Stores / All Stores). Π‘Π°ΠΌΠ°ΡΠ° ΠΊΠΎΡΠ΅Π½ΠΎΠ²Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ Π½Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΡΡΡΠΎ Π½Π΅ Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° ΡΡΠΎΠ½ΡΠ°, ΡΠ°ΠΌΠΎ Π½Π΅ΠΉΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π²ΡΠ΅ ΠΏΠ°ΠΊ Π΅ Π²Π½ΠΎΡ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, Π½ΡΠΌΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΏΡΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² Π±Π°Π·Π°ΡΠ° ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, Π° ΡΠ΅ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΎΡ ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈ ΠΎΡ ΡΠ°ΠΌΠ°ΡΠ° Magento (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ). ΠΡΡΠΊΠΎΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π² Π±Π°Π·Π°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π²Π½ΠΎΡΠΈΠΌΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡ Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° (ΡΡΠΎΡΠ½Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° ΡΡΠ°Π²Π° ΠΏΠΎ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠΌΠ΅, ΠΏΡΠΈ ΡΡΠΎΡΠ½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·Π²Π»ΠΈΡΠ° id Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ°):
function create($prodId, $catId)
{
\/** @var MagentoFrameworkAppResourceConnection $this->resource *\/
\/** @var MagentoFrameworkDBAdapterPdoMysql $conn *\/
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_category_product');
$bind = [
'category_id' => $catId,
'product_id' => $prodId,
];
$conn->insert($table, $bind);
}Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈΡΠ΅ Β«ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 1Β» ΠΈ Β«ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 2Β» Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:

ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
Π‘Π»Π΅Π΄ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ: ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°
.\/bin\/magento indexer:reindex; - ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° URL Π°Π΄ΡΠ΅ΡΠΈ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ\/ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ ««
ΠΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ Π² Π°Π΄ΠΌΠΈΠ½ ΠΏΠ°Π½Π΅Π»Π° ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:

ΠΈ Π½Π° ΡΡΠΎΠ½ΡΠ°:

Π Π΅Π·ΡΠΌΠ΅
Π‘ΡΡΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ (10 Π±ΡΠΎΡ), ΠΊΠΎΠΉΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΡΠ°ΡΠΈΡ, ΡΠ΅ Π²Π½Π°ΡΡ ΠΏΠΎΠ½Π΅ Ρ ΠΏΠΎΡΡΠ΄ΡΠΊ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ (1 ΡΠ΅ΠΊΡΠ½Π΄Π° ΡΡΠ΅ΡΡ 10). ΠΠ° ΠΏΠΎ-ΡΠΎΡΠ½Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ β Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΡΠΈΠ½, Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Ρ ΠΈΠ»ΡΠ΄ΠΈ. ΠΡΠ΅ ΠΏΠ°ΠΊ, Π΄ΠΎΡΠΈ ΠΏΡΠΈ ΡΠ°ΠΊΡΠ² ΠΌΠ°Π»ΡΠΊ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΈΠ·Π²ΠΎΠ΄, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½ ΠΎΡ Magento (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ), Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ (ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π°ΠΌ β Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ!) ΡΡΠΊΠΎΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π½ΠΎ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ (ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π°ΠΌ β Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ!) Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Π±Π°Π·Π°ΡΠ°.
Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° Π²ΠΎΠ΄Π°ΡΠ° ΡΠ΅ ΠΎΠΊΠ°Π·Π° ΠΌΠΎΠΊΡΠ° ΠΈ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΠΊΡΠΈΡΠΈΠ΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠ΅Π³Π° ΠΈΠΌΠ°ΠΌ ΠΊΠΎΠ΄, Ρ ΠΊΠΎΠΉΡΠΎ Π΄Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌ ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΠΎ-ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
