Π
Disclaimer: Π 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"
}
ΠΠ±Π·ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ°ΠΏΠΎΠ² ΠΈΠΌΠΏΠΎΡΡΠ°
- ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°
- ΡΠ²ΡΠ·Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ web-ΡΠ°ΠΉΡΠ°
- Π±Π°Π·ΠΎΠ²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° (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
β Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ‘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).
Π‘Π²ΡΠ·Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ web-ΡΠ°ΠΉΡΠ°
Π‘Π²ΡΠ·Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Ρ ΡΠ°ΠΉΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π² ΠΊΠ°ΠΊΠΈΡ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Ρ ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΡ Π²ΠΈΡΡΠΈΠ½Π°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° ΡΡΠΎΠ½ΡΠ΅.
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);
}
}
ΠΠΎ ΠΊΠΎΠ΄Ρ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ id ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
(datetime
, decimal
, int
, text
, varchar
), Π·Π°ΡΠ΅ΠΌ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΈΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ Π²ΠΈΡΡΠΈΠ½Ρ (store_id = 0
).
ΠΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠ°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅:
ΠΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2.3 Π² Magento ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΡΠ°Π±Π»ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°):
cataloginventory_*
: ΡΡΠ°ΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ°;inventory_*
: Π½ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° (MSI β Multi Source Inventory);
ΠΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π² ΠΎΠ±Π΅ ΡΡΡΡΠΊΡΡΡΡ, Ρ.ΠΊ. Π½ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠΎΠΊΠ° Π΅ΡΡ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° ΠΎΡ ΡΡΠ°ΡΠΎΠΉ (ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ Π΄Π»Ρ default
ΡΠΊΠ»Π°Π΄Π° Π² Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° cataloginventory_stock_status
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ inventory_stock_1
).
cataloginventory_
ΠΡΠΈ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠΈ Magneto 2.3 ΠΌΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅ΠΌ 2 Π·Π°ΠΏΠΈΡΠΈ Π² store_website
, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄Π²ΡΠΌ ΡΠ°ΠΉΡΠ°ΠΌ β Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΎΠΌΡ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌΡ:
website_id|code |name |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
0|admin|Admin | 0| 0| 0|
1|base |Main Website| 0| 1| 1|
Π ΡΠ°Π±Π»ΠΈΡΠ΅ cataloginventory_stock
Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° Π·Π°ΠΏΠΈΡΡ:
stock_id|website_id|stock_name|
--------|----------|----------|
1| 0|Default |
Π’.Π΅., Ρ Π½Π°Ρ Π² ΡΡΠ°ΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ «ΡΠΊΠ»Π°Π΄» (stock
) ΠΈ ΠΎΠ½ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΎΠΌΡ website’Ρ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡ Π½ΠΎΠ²ΡΡ
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);
}
inventory_
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 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» (ΡΡΡΠ»ΠΊΠ° Π½Π° web-ΡΠ°ΠΉΡ ΠΈΠ΄ΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ web-ΡΠ°ΠΉΡΠ° β base
).
ΠΠ΄ΠΈΠ½ «ΡΠΊΠ»Π°Π΄» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ «ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ«, Π° ΠΎΠ΄ΠΈΠ½ «ΠΈΡΡΠΎΡΠ½ΠΈΠΊ» β ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ «ΡΠΊΠ»Π°Π΄Π°ΠΌ» (ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ «ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ»). ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ default’ΠΎΠ²ΡΠ΅ «ΠΈΡΡΠΎΡΠ½ΠΈΠΊ» ΠΈ «ΡΠΊΠ»Π°Π΄«. ΠΠ½ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΡΠ½ΠΎΡΡΡΠΌ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π° β Π²ΡΠ»Π΅ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° «Can not save link related to Default Source or Default Stock«). ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ MSI Π² Magento 2 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ «
Π― Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ default’ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π²ΡΡ ΠΈΠ½Π²Π΅Π½ΡΠ°ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊ default
, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ Π² ΠΊΠ°Π½Π°Π»Π΅ ΠΏΡΠΎΠ΄Π°ΠΆΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ web-ΡΠ°ΠΉΡΠΎΠΌ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 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
: ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΌΠ΅Π΄ΠΈΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌ (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ, default ΠΌΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°);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
Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ΅Π΄ΠΈΠ°-ΡΠ°ΠΉΠ» Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ Π΄Π»Ρ default-Π²ΠΈΡΡΠΈΠ½Ρ:
function createGalleryValue($mediaId, $prodId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity_media_gallery_value');
$bind = [
'value_id' => $mediaId,
/* 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’ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²/ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ «
elgentos/regenerate-catalog-urls «
ΠΡΠΎΠ΄ΡΠΊΡΡ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
ΠΈ Π½Π° ΡΡΠΎΠ½ΡΠ΅:
Π Π΅Π·ΡΠΌΠ΅
Π’ΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² (10 ΡΡΡΠΊ), ΡΡΠΎ ΠΈ Π² ΠΏΡΠΎΡΠ»ΠΎΠΉ ΡΡΠ°ΡΡΠ΅, ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Π½Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±ΡΡΡΡΠ΅Π΅ (1 ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΏΡΠΎΡΠΈΠ² 10). ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠΉ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΠΈ Π½ΡΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² β Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½, Π° Π»ΡΡΡΠ΅ ΡΡΡΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Magento (ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ), Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ (Π°ΠΊΡΠ΅Π½ΡΠΈΡΡΡ β Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ!) ΡΡΠΊΠΎΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ (Π°ΠΊΡΠ΅Π½ΡΠΈΡΡΡ β Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ!) ΡΠ½ΠΈΠΆΠ°ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² Π±Π°Π·Ρ.
Π ΠΈΡΠΎΠ³Π΅ Π²ΠΎΠ΄Π° ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΌΠΎΠΊΡΠΎΠΉ ΠΈ ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ Π½Π΅ ΠΎΡΠΊΡΠΎΠ²Π΅Π½ΠΈΠ΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠ°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com