Ð
ááœá: Magento ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá
áœááºáž ááŸááááºá
áá±á¬ááºážáá«ážááŸá
áºáá¯áá¯á¶ážáá±ážáá¬ážááŒááºážááŸááœááºáá±á«áºáá¬áá±á¬áá¯ááºááᯠMagento module ááœááºááŒáá·áºááŸá¯ááá¯ááºáááº
- áá¯ááºáá¯ááºáá»á¬ážááẠáááºáá®ážáá¬ážááŒááºážáá¬ááŒá áºááŒá®áž á¡ááºááááºááá¯ááºáá«á
- ááá¯áá±á«ááºáá áºáá¯á¶áž
- áááºážááá¯á·áááœá²á·á ááºážáá¯á¶ááá«áá² á¡áá»áá¯ážá¡á á¬ážá¡áááºáá»á¬ážááá¯áᬠáááºááœááºážáá«áááºá
- áá±áá¬áááºáá±á¬ááºáá¯á¶áá»á¬ážááẠáá¬ážááŸááºáž 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)
- Inventory data (á áá±á¬á·ááœááºááŸááá±á¬ áá¯ááºáá á¹á ááºážá¡áá±á¡ááœááº)
- áá®áá®áᬠ(áá¬ááºáá¯á¶)
- áááºááá±á¬ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááŸáá·áº áá»áááºáááºááŸá¯
áá¯ááºáá á¹á ááºážááŸááºáá¯á¶áááºááŒááºážá
á¡ááŒá±áá¶áá¯ááºáá¯ááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááœááºááœá±á·ááá¯ááºáááºá 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 adapter ááá¯á¡áá¯á¶ážááŒá¯áááº-
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
áá¯ááºáá¯ááºááá¬ážááœááºá admin panel ááœááºááŒááºááá¯ááºááẠ(áááºááá±á¬ááº/áá¯ááºáá¯ááºáá»á¬áž).
áá¯ááºáá¯ááºááŸáá·áº áááºááá¯ááºááŒá¬áž áááºá ááºááŸá¯
áá¯ááºáá¯ááºá ááá¯ááºááŸáá·áº áá»áááºáááºááŸá¯ááẠáááºááá·áºááá¯ááºáá»á¬ážááŸáá·áº ááŒáááá·áºáá±áá¬ááœáẠáá¯ááºáá¯ááºááᯠááŸá±á·ááœááºáááŸáááá¯ááºáááºááᯠáá¯á¶ážááŒááºáááºá
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);
}
}
attribute áá¯ááºááá¯áá¯á¶ážááŒá®ážá áá»áœááºá¯ááºááá¯á·ááẠáááºážá ID ááŸáá·áº áá±áá¬á¡áá»áá¯ážá¡á
á¬ážááᯠáá¯á¶ážááŒááºááẠ(datetime
, decimal
, int
, text
, varchar
) ááá¯á·áá±á¬áẠá
á®áá¶ááá·áºááœá²áá±ážáááºážááá¯ážá¡ááœáẠáá±áá¬ááᯠááá·áºáá»á±á¬áºáá±á¬ááá¬ážááœáẠáá±ážáá« (store_id = 0
).
áá¯ááºáá¯ááºááœáẠá¡áááºáá±á¬áºááŒáá« á¡áááºá¡áá»ááºážáá»á¬ážááᯠáá±á«ááºážááá·áºááŒá®ážáá±á¬ááºá áááºááẠá€áá¯á¶ááᯠá á®áá¶ááá·áºááœá²áá° á¡ááá·áºááœáẠáááŸááááº-
á á¬áááºážá¡áá»ááºá¡áááº
Magento ááœáẠáá¬ážááŸááºáž 2.3 á០á áááºá á á¬áááºážá¡áá»ááºá¡ááẠááá¯ááŸá±á¬ááºááŸá¯ (áá¯ááºáá¯ááºááá¬á) ááᯠáá±ážáá±á¬ááºááá·áº á¡ááŒáá¯ááºááá¬áž ááŸá áºáá¯ááŸááááºá
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
).
âáá
áºáá±á¬ááºáááá¯áá±á«ááº"áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážáá²á· áá»áááºáááºááá¯ááºáá«áááº"ááááºážáááºážááŒá
áº"áá²á· áá
áºáá¯"á¡áááºážá¡ááŒá
áº"-áá±á«ááºážáá»á¬ážá
áœá¬"ááá¯áá±á«ááºáá»á¬áž"(áá»á¬ážá
áœá¬áá±á¬ áááºáá¶áá±áž)á ááŒáœááºážáá»ááºááœá±ááá±á¬á· áá°áááºážá¡ááá¯ááºážáá«áá²"á¡áááºážá¡ááŒá
áº"ááá¯á¡áá«"ááá¯áá±á«ááºâ . áááºážááá¯á·ááẠá¡ááŒá¬ážá¡áá¬áá»á¬ážááŸáá·áº ááŒááºáááºáá»áááºáááºááŒááºážáááŒá¯áá« (áá¯ááºá¡ááá·áºááœáẠááá·áºáááºáá»áẠ- á¡ááŸá¬ážá¡ááœááºáž âáá°áááºážáááºážááŒá
Ạááá¯á·ááá¯áẠáá°áááºážá
áá±á¬á·ááŸáá·áº áááºá
ááºáá±á¬ááá·áºááºááᯠááááºážáááºážááááá«áâ ) á 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
Register ááŸá¬ áááºáá¬ážáá«áááºá ./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
áá®áá®áá¬ááá¯ááºáá áºáá¯á¡á¬áž ááá°áá®áá±á¬á¡áááºážááá¹ááá»á¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá (áááºááá¯ááºáᬠattribute áá¯ááºááᯠááœááºážá á¥áºáá»á¬ážááœáẠááœáŸááºááŒáááº-
- á¡ááŒá±áá¶(
image
) - áá¯á¶ááẠ(
small_image
) - áá¯á¶áá±áž (
thumbnail
) - Swatch áá¯á¶ (
swatch_image
)
áá®áá®áá¬ááá¯ááºáá
áºáá¯ááá¯á· á¡áááºážááá¹ááá»á¬ážááᯠáá»áááºáááºááŒááºážááẠá¡ááá¡áá»ááŒá
áºáá»ááºáá±áááºá catalog_product_entity_varchar
. binding code ááẠ"ááŸááá¯ááºáá¡ááŒá±áá¶áá¯ááºáá¯ááºá¡áááºá¡ááœá±ážáá»á¬áž"á
á á®áá¶ááá·áºááœá²áá°á¡ááá·áºááŸá áá¯ááºáá¯ááºááá¯á· áá¯á¶áá áºáá¯á¶ááᯠááá·áºááŒá®ážáá±á¬áẠáááºážááẠá€áá²á·ááá¯á·ááŒá áºáá¯á¶ááááº-
á¡áá»áá¯ážá¡á á¬áž
á¡áá»áá¯ážá¡á á¬ážá¡ááá¯áẠáá±áá¬áá«ááŸááá±á¬ á¡áááááá¬ážáá»á¬áž-
catalog_category_entity
á¡áá»áá¯ážá¡á á¬ážá á¬áááºážácatalog_category_product
: áá¯ááºáá¯ááºáá»á¬ážááŸáá·áº á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááŒá¬áž áá»áááºáááºááŸá¯ácatalog_category_entity_*
: EAV áááºááœáŸááºážáá»ááºáááºááá¯ážáá»á¬áž;
á¡á
ááá¯ááºážááœááºá á¡áá»ááºážááŸá®ážáá±á¬ Magento á¡ááá®áá±ážááŸááºážáá
áºáá¯ááœááºá á¡áá»áá¯ážá¡á
á¬áž ááŸááºáá¯á¶áááºááŒááºážááœáẠá¡áá»áá¯ážá¡á
á¬áž á áá¯áá«ááŸáááẠ(áá±á¬áºáá¶á¡áááºáá»á¬ážááᯠáá«á¡ááá¯áá»á¯á¶ážáá¬ážáááº- 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 catalog áá áºáá¯áá¯á¶ážá á¡ááŒá áºááŒá áºááŒá®áž á á®áá¶ááá·áºááœá²áá° á¡ááá·áºááœáẠááá¯á·ááá¯áẠááŸá±á·á á¬áá»ááºááŸá¬ááœáẠááááá¯ááºáá«á id=2 áá«áá±á¬ á¡áá»áá¯ážá¡á á¬áž (áá°áááºážá¡áá»áá¯ážá¡á á¬áž) ááẠáááºáááá¯ááºá áááºáá ááá¯ážá¡ááœáẠroot á¡áá»áá¯ážá¡á á¬ážááŒá áºááẠ(áááºááááºááá¯ááºá ááá¯áž) á¡ááá®áá±ážááŸááºážááᯠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠáááºáá®ážáá²á·ááẠ(ááŒáá·áºáá«á á á®áá¶ááá·áºááœá²áá°/á ááá¯ážááá¯ááºáá»á¬áž/á ááá¯ážááá¯ááºáá»á¬ážá¡á¬ážáá¯á¶áž) ááá¯á·á¡ááŒááºá á ááá¯ážááá¯ááºá root á¡áá»áá¯ážá¡á á¬ážááá¯áááºáž áááºážá á¡áá»áá¯ážá¡á á¬ážááœá²áá»á¬ážáᬠááŸá±á·ááœáẠááááá¯ááºáá«á
á€áá±á¬ááºážáá«ážááá±á«ááºážá ááºááẠáá¯ááºáá¯ááºáá»á¬ážáá±á«áºááœáẠáá±áá¬áááºááœááºážáá±áá²ááŒá áºáá±á¬ááŒá±á¬áá·áº á¡áá»áá¯ážá¡á á¬ážáá»á¬ážáááºáá®ážáá¬ááœáẠáá±áá¬áá±á·á áºáá²ááá¯á· ááá¯ááºááá¯ááºáááºáá±á¬ááºááŸá¯ááᯠáá»áœááºá¯ááºá¡áá¯á¶ážáááŒá¯áá² 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 (áá±á¬áºáááºáá»á¬ážááŸáá·áº ááá¯ááŸá±á¬ááºáááºážáá»á¬áž) á០áá¶á·ááá¯ážáá±ážáá±á¬ áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠá¡áá±ážááŒá®ážááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á· áá±á¬ááºáá»ááºáá»ááá¯ááºáá«áááºá á¡ááœááº!) ááá¯á¡ááºáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠá¡ááŸáááºááŒáŸáá·áºáá±á¬áºáááºáž áá áºáá»áááºáááºážááœáẠáááááá¬áᬠ(áá»áœááºáá±á¬áº á¡áá±ážáá±ážáá±á¬áºááŒáááº- á¡ááœááº!) áá±áá¬áá±á·á áºáá²ááá¯á· áá±áá¬áá±á¬ááºááŸáááá·áº á¡ááŒááºááŸá¯ááºážááᯠáá»áŸá±á¬á·áá»áá«á
ááááºá¡áá±ááŒáá·áº áá±ááẠá áá¯á áœááºáá±ááŒá®áž áááºážááẠáá±á«áºááœááºážááŒááºážááá¯ááºáá«á ááá¯á·áá±á¬áºá ááᯠáá»áœááºá¯ááºááœáẠáá á¬ážááẠáá¯áẠááŸáááŒá®áž ááá¯á á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ áá±á¬ááºáá»ááºá¡áá»áá¯á·ááᯠáááŸáááá¯ááºáááºá
source: www.habr.com