╨Т
рддреНрдпрд╛рдЧ: 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_
рдореНрдпрд╛рдЧреНрдиреЗрдЯреЛ реи.рей рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд╕рдБрдЧ рд╕реБрд░реБрдорд╛ реи рд╡рдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рд╣реБрдиреНрдЫрдиреН 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);
}
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|
рдбрд╛рдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рджреНрд╡рд╛рд░рд╛ рдиреНрдпрд╛рдп рдЧрд░реНрджреИ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдмрд┐рдХреНрд░реА рдЪреНрдпрд╛рдирд▓рд╣рд░реВ рдорд╛рдирд┐рдиреНрдЫ, рддрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдорд╛рддреНрд░ рдЬрдбрд╛рди "рд╢реЗрдпрд░"-"рд╡реЗрдмрд╕рд╛рдЗрдЯ"(рд╡реЗрдмрд╕рд╛рдЗрдЯрдХреЛ рд▓рд┐рдЩреНрдХрд▓реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛрдб рдкрдЫреНрдпрд╛рдЙрдБрдЫ - 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 ┬л
рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реЗрдкрдЫрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреНрдпрд╛рдирд▓рдорд╛ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ:
рд░ рдЕрдЧрд╛рдбрд┐:
рд╕рд╛рд░рд╛рдВрд╢
рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реЗрдЦрдорд╛ рдЬрд╕реНрддреИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рдПрдЙрдЯреИ рд╕реЗрдЯ (резреж рдЯреБрдХреНрд░рд╛рд╣рд░реВ) рдХрдореНрддрд┐рдорд╛ рдкрдирд┐ рджреНрд░реБрдд рд░реВрдкрдорд╛ (рез рд╕реЗрдХреЗрдиреНрдб рдмрдирд╛рдо резреж) рдорд╛ рдЖрдпрд╛рдд рдЧрд░рд┐рдиреНрдЫред рдЧрддрд┐рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ - рдзреЗрд░реИ рд╕рдп, рд╡рд╛ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдЕрдЭреИ рд╣рдЬрд╛рд░реМрдВред рдпрджреНрдпрдкрд┐, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдХреЛ рдпрддрд┐ рд╕рд╛рдиреЛ рдЖрдХрд╛рд░рдХреЛ рд╕рд╛рде рдкрдирд┐, рд╣рд╛рдореА Magento (рдореЛрдбреЗрд▓ рд░ рднрдгреНрдбрд╛рд░рд╣рд░реВ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рднрдиреНрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреБрдЧреНрди рд╕рдХреНрдЫреМрдВ (рдо рдЬреЛрдб рджрд┐рдиреНрдЫреБ - рдзреЗрд░реИ!) рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдХреЛ рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рдЧрддрд┐ рджрд┐рдиреБрд╣реЛрд╕реН, рддрд░ рдПрдХреИ рд╕рдордпрдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ (рдо рдЬреЛрдб рджрд┐рдиреНрдЫреБ - рдзреЗрд░реИ!) рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рдЖрдЙрдиреЗ рдЧрддрд┐ рдШрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдкрд╛рдиреА рднрд┐рдЬреЗрдХреЛ рднрдпреЛ рд░ рдпреЛ рдкреНрд░рдХрдЯреАрдХрд░рдг рд╣реЛрдЗрдиред рдЬреЗ рд╣реЛрд╕реН, рдЕрдм рдорд╕рдБрдЧ рдЦреЗрд▓реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рдЫ рд░ рд╕рд╛рдпрдж рдХреЗрд╣реА рдердк рд░реЛрдЪрдХ рдирд┐рд╖реНрдХрд░реНрд╖рд╣рд░реВрдорд╛ рдЖрдЙрдБрдЫреБред
рд╕реНрд░реЛрдд: www.habr.com