╨Т
рдЬрдмрд╛рдмрджрд╛рд░реА рдирд╛рдХрд╛рд░рдгреЗ: 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
- рдЬрд░ рдЖрдореНрд╣реА рддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдирд╛рд╣реА, рддрд░ 'рд╕рд┐рдВрдкрд▓' рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓
рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░ рдереЗрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдореА 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
рддреЗ ре▓рдбрдорд┐рди рдкреЕрдиреЗрд▓рдордзреНрдпреЗ, рдЙрддреНрдкрд╛рджрди рдЧреНрд░рд┐рдбрдордзреНрдпреЗ рджреГрд╢реНрдпрдорд╛рди рд╣реЛрддреЗ (рдХреЕрдЯрд▓реЙрдЧ/рдЙрддреНрдкрд╛рджрдиреЗ).
рдЙрддреНрдкрд╛рджрди рдЖрдгрд┐ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рд╕рдВрдмрдВрдз
рд╕рд╛рдЗрдЯрд╕рд╣ рдЙрддреНрдкрд╛рджрдирд╛рдЪреА рдЬреЛрдбрдгреА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рдХреА рдЙрддреНрдкрд╛рджрди рдХреЛрдгрддреНрдпрд╛ рд╕реНрдЯреЛрдЕрд░рдордзреНрдпреЗ рдЖрдгрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рддреЗ рд╕рдореЛрд░ рдЙрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓.
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
).
рдЙрддреНрдкрд╛рджрдирд╛рдордзреНрдпреЗ рд╡рд░реАрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдЪрд┐рддреНрд░ рдкреНрд░рд╢рд╛рд╕рди рдкреЕрдиреЗрд▓рдордзреНрдпреЗ рдорд┐рд│реЗрд▓:
рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛
Magento рдордзреАрд▓ рдЖрд╡реГрддреНрддреА 2.3 рдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, рд╕рд╛рд░рдгреАрдЪреЗ рджреЛрди рд╕рдорд╛рдВрддрд░ рд╕рдВрдЪ рдЖрд╣реЗрдд рдЬреЗ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдорд╛рд╣рд┐рддреА (рдЙрддреНрдкрд╛рджрди рдкреНрд░рдорд╛рдг) рд╕рдВрдЪрдпрд┐рдд рдХрд░рддрд╛рдд:
cataloginventory_*
: рдЬреБрдиреА рд░рдЪрдирд╛;inventory_*
: рдирд╡реАрди рд░рдЪрдирд╛ (MSI - рдорд▓реНрдЯреА рд╕реЛрд░реНрд╕ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА);
рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрдиреНрд╣реА рд╕рдВрд░рдЪрдирд╛рдВрдордзреНрдпреЗ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдирд╡реАрди рд░рдЪрдирд╛ рдЕрджреНрдпрд╛рдк рдЬреБрдиреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╕реНрд╡рддрдВрддреНрд░ рдирд╛рд╣реА (рддреНрдпрд╛рд╕рд╛рдареА рдмрд╣реБрдзрд╛ default
рдирд╡реАрди рд╕рдВрд░рдЪрдиреЗрдд рд╡реЗрдЕрд░рд╣рд╛рдКрд╕рдордзреНрдпреЗ рдПрдХ рдЯреЗрдмрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ cataloginventory_stock_status
рдореНрд╣рдгреВрди inventory_stock_1
).
cataloginventory_
рдореЕрдЧреНрдиреЗрдЯреЛ 2.3 рддреИрдирд╛рдд рдХрд░рддрд╛рдирд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ 2 рдиреЛрдВрджреА рдЕрд╕рддрд╛рдд store_website
, рдЬреЗ рджреЛрди рд╕рд╛рдЗрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ - рдкреНрд░рд╢рд╛рд╕рдХреАрдп рдЖрдгрд┐ рдореБрдЦреНрдп рдХреНрд▓рд╛рдпрдВрдЯ:
website_id|code |name |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
0|admin|Admin | 0| 0| 0|
1|base |Main Website| 0| 1| 1|
рдЯреЗрдмрд▓ cataloginventory_stock
рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдлрдХреНрдд рдПрдХ рдкреНрд░рд╡реЗрд╢ рдЖрд╣реЗ:
stock_id|website_id|stock_name|
--------|----------|----------|
1| 0|Default |
рдореНрд╣рдгрдЬреЗрдЪ, рдЖрдордЪреНрдпрд╛ рдЬреБрдиреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрдд рдлрдХреНрдд рдПрдХ "рдЧреЛрджрд╛рдо" рдЖрд╣реЗ (stock
) рдЖрдгрд┐ рддреЗ рдкреНрд░рд╢рд╛рд╕рдХреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯрд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ. ре▓рдбрдорд┐рди рдкреЕрдирд▓рджреНрд╡рд╛рд░реЗ рдирд╡реАрди рдЬреЛрдбрдд рдЖрд╣реЗ sources
/stocks
MSI (рдирд╡реАрди рд░рдЪрдирд╛) рдордзреНрдпреЗ рдирд╡реАрди рдиреЛрдВрджреА рд╣реЛрдд рдирд╛рд╣реАрдд cataloginventory_stock
.
рдЬреБрдиреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрддреАрд▓ рдЙрддреНрдкрд╛рджрдирд╛рдВрдмрджреНрджрд▓ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рд░реЗрдХреЙрд░реНрдб рдХреЗрд▓рд╛ рдЬрд╛рддреЛ:
cataloginventory_stock_item
cataloginventory_stock_status
cataloginventory_stock_item
function createOldItem($prodId, $qty)
{
$isQtyDecimal = (((int)$qty) != $qty);
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_item');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'is_qty_decimal' => $isQtyDecimal,
'is_in_stock' => $isInStock,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}
cataloginventory_stock_status
function createOldStatus($prodId, $qty)
{
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_status');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}
рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА_
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд╡реАрди рд╕рдВрд░рдЪрдиреЗрдд 1 "рдЖрд╣реЗрд╕реНрддреНрд░реЛрдд"(inventory_source
):
source_code|name |enabled|description |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default |Default Source| 1|Default Source|0.000000| 0.000000|US |...|
рдЖрдгрд┐ рдПрдХ "рдХреЛрдард╛рд░"(inventory_stock
):
stock_id|name |
--------|-------------|
1|Default Stock|
┬лрд╕реНрддреНрд░реЛрдд┬╗ рдЙрддреНрдкрд╛рджрдирд╛рдВрд╕рд╛рдареА рднреМрддрд┐рдХ рд╕рдВрдЪрдпрди рджрд░реНрд╢рд╡рддреЗ (рд░реЗрдХреЙрд░реНрдбрдордзреНрдпреЗ рднреМрддрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЖрдгрд┐ рдореЗрд▓рд┐рдВрдЧ рдкрддреНрддрд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ). "рдХреЛрдард╛рд░"рдЕрдиреЗрдХ "рд╕реНрд░реЛрддрд╛рдВрдЪреЗ" рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдШрдЯрди рдЖрд╣реЗ (inventory_source_stock_link
)
link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
1| 1|default | 1|
рд╡рд┐рдХреНрд░реА рдЪреЕрдиреЗрд▓рдЪреЗ рдХрдиреЗрдХреНрд╢рди рдЬреНрдпрд╛ рд╕реНрддрд░рд╛рд╡рд░ рд╣реЛрддреЗ (inventory_stock_sales_channel
)
type |code|stock_id|
-------|----|--------|
website|base| 1|
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░рдиреБрд╕рд╛рд░, рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рдЪреЗ рд╡рд┐рдХреНрд░реА рдЪреЕрдиреЗрд▓ рдЧреГрд╣рд┐рдд рдзрд░рд▓реЗ рдЬрд╛рддрд╛рдд, рдкрд░рдВрддреБ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рдлрдХреНрдд рдХрдиреЗрдХреНрд╢рди "рд╢реЗрдЕрд░-рд╡реЗрдмрд╕рд╛рдЗрдЯ"(рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреА рд▓рд┐рдВрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛрдбрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ - base
).
рдПрдХ "рдХреЛрдард╛рд░"рдЕрдиреЗрдХрд╛рдВрд╢реА рдЬреЛрдбрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ"рд╕реНрддреНрд░реЛрдд"рдЖрдгрд┐ рдПрдХ "рд╕реНрддреНрд░реЛрдд"- рдЕрдиреЗрдХ"рдЧреЛрджрд╛рдореЗ"(рдЕрдиреЗрдХ-рддреЗ-рдЕрдиреЗрдХ рд╕рдВрдмрдВрдз). рдЕрдкрд╡рд╛рдж рдбреАрдлреЙрд▓реНрдЯ рдЖрд╣реЗрдд "рд╕реНрддреНрд░реЛрдд"рдЖрдгрд┐"рдХреЛрдард╛рд░" рддреЗ рдЗрддрд░ рдШрдЯрдХрд╛рдВрд╢реА рдкреБрдиреНрд╣рд╛ рдЬреЛрдбрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд (рдХреЛрдб рд╕реНрддрд░рд╛рд╡рд░реАрд▓ рдорд░реНрдпрд╛рджрд╛ - рддреНрд░реБрдЯреА тАЬрдбреАрдлреЙрд▓реНрдЯ рд╕реНрддреНрд░реЛрдд рдХрд┐рдВрд╡рд╛ рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдЯреЙрдХрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ рд╕реЗрд╡реНрд╣ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА"). Magento 2 рдордзреАрд▓ MSI рд╕рдВрд░рдЪрдиреЗрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рд▓реЗрдЦрд╛рдд рдЖрдврд│реВ рд╢рдХрддрд╛рдд.
рдореА рдбреАрдлреЙрд▓реНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡рд╛рдкрд░реЗрди рдЖрдгрд┐ рд╕рд░реНрд╡ рдЗрдиреНрд╡реНрд╣реЗрдВрдЯрд░реА рдорд╛рд╣рд┐рддреА рд╕реНрддреНрд░реЛрддрд╛рдордзреНрдпреЗ рдЬреЛрдбреЗрди 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 рдХреЕрдЯрд▓реЙрдЧрдЪреЗ рдореВрд│ рдЖрд╣реЗ рдЖрдгрд┐ рдкреНрд░рд╢рд╛рд╕рдХ рдкреЕрдиреЗрд▓рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдкреГрд╖реНрдард╛рд╡рд░ рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реА. рдЖрдпрдбреА = 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