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