Magento 2: kawemai tika nga hua ki roto i te papaa raraunga
В Tuhinga o mua I whakaahuahia e au te tikanga o te kawe mai i nga hua ki roto i te Magento 2 i runga i te tikanga - na roto i nga tauira me nga putunga. Ko te tikanga o mua he iti rawa te tere tukatuka raraunga. Ko taku pona e whakaputa ana mo te kotahi hua mo ia hekona. I roto i tenei haere tonu, ka whakaaro ahau ki tetahi huarahi rereke ki te kawemai i tetahi hua - ma te urunga tika ki roto i te paataka korero, ma te takahi i nga tikanga Magento 2 (tauira, wheketere, putunga). Ko te raupapa o nga hikoinga ki te kawemai i nga hua ka taea te urutau ki tetahi reo papatono ka taea te mahi me MySQL.
Whakakape: Kei a Magento nga mahi kua rite mo kawemai raraunga a, tera pea, ka ranea maau. Heoi, ki te hiahia koe kia kaha ake te whakahaere i te tukanga kawemai, kaua e whakawhäitihia ki te whakarite i te konae CSV mo nga mea kei a koe, nau mai ki te ngeru.
Ko te waehere i puta mai i te tuhi i nga tuhinga e rua ka taea te tiro ki te waahanga Magento "flancer32/mage2_ext_demo_import". Anei etahi here i whaia e au ki te whakangawari i te waehere kōwae demo:
Ko nga hua ka hangaia anake, kaore i te whakahou.
Kotahi te whare putunga
Ko nga ingoa waahanga anake ka kawemai, kaore he hanganga
Ka ū nga hanganga raraunga ki te putanga 2.3
JSON mo te kawemai i te hua kotahi:
{
"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"
}
Tirohanga o nga waahanga matua o te kawemai
rehitatanga o te hua ake
hononga i waenga i te hua me te paetukutuku
huanga hua taketake (EAV)
raraunga rārangi (te nui o te hua kei roto i nga taonga)
pāpāho (pikitia)
hononga ki nga waahanga pukapuka
Rehitatanga Hua
Ka kitea nga korero hua taketake i roto 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`)
)
Ko nga korero iti e hiahiatia ana hei hanga urunga ki te rehita hua ko:
attribute_set_id
sku
taapiri:
type_id — ki te kore matou e kii, katahi ka whakamahia te 'ngawari'
Hei tuhi tika ki te papaaarangi, ka whakamahi ahau i te DB adapter o Magento ake:
Ko te hua hou kua rehitatia kaore ano kia whai ingoa, whakaahuatanga ranei. Ka mahia enei mea katoa Nga huanga EAV. Anei te rarangi o nga huanga hua taketake e hiahiatia ana kia tika te whakaatu o te hua ki mua:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Ka taapirihia he huanga motuhake ki tetahi hua penei (ka waiho nga korero mo te whiwhi tohu me te momo o te huanga mai i tana waehere):
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);
}
}
Ma te whakamahi i te waehere huanga, ka whakatauhia e maatau tona id me te momo raraunga (datetime, decimal, int, text, varchar), ka tuhia nga raraunga mo te matapihi whakahaere ki te ripanga tika (store_id = 0).
Whai muri i te taapiri i nga huanga o runga ake nei ki te hua, ka whiwhi koe i tenei pikitia ki te papa whakahaere:
Raraunga Rarangi
Ka timata mai i te putanga 2.3 i Magento, e rua nga huinga whakarara o nga ripanga e whakarato ana i te rokiroki o nga korero raarangi (te rahinga hua):
Me taapiri koe i nga raraunga raarangi ki nga hanganga e rua, na te mea ko te hanganga hou kaore ano kia tino motuhake mai i te mea tawhito (ko te mea pea mo default whare putunga i roto i te hanganga hou he tepu kei roto cataloginventory_stock_status rite inventory_stock_1).
putumōhio rārangi_
I te wa e tukuna ana a Magneto 2.3 i te tuatahi ka 2 nga whakaurunga ki roto store_website, e rite ana ki nga waahi e rua - te kaiwhakahaere me te kiritaki matua:
Arā, i roto i to tatou hanganga tawhito kotahi anake te "whare putunga" (stock) a kua honoa ki te paetukutuku whakahaere. Te taapiri i nga mea hou ma te papa whakahaere sources/stocks i roto i te MSI (hanganga hou) kaore e puta he whakaurunga hou ki roto cataloginventory_stock.
Ko nga raraunga rarangi mo nga hua i roto i te hanganga tawhito ka tuhia i te tuatahi ki nga ripanga:
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);
}
rārangi_
I te timatanga, ko te hanganga hou mo te penapena raraunga raarangi he 1 "puna"(inventory_source):
«Puna» e tohu ana i te rokiroki tinana mo nga hua (kei roto i te rekoata nga taunga tinana me te wahitau mēra). "Warehouse"he uniana arorau o etahi "puna" (inventory_source_stock_link)
i te taumata i puta ai te hononga ki te hongere hoko (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Ma te whakatau i te hanganga raraunga, he maha nga momo huarahi hoko ka kiia, engari ma te taunoa ko te hononga "kararehe"-"paetukutuku"(Ko te hono ki te paetukutuku e whai ana i te waehere paetukutuku - base).
Kotahi"whare putunga whare"Ka taea te hono ki etahi"puna"me tetahi"puna"- ki etahi"whare putunga"(hononga maha-ki-maha). He taunoa nga okotahi "puna»Na«whare putunga whare". Kaore i te hono ano ki etahi atu hinonga (whakaiti i te taumata waehere - te hapa "Kaore e taea te tiaki hononga e pa ana ki te Puna Taunoa me te Raarangi Taunoa"). Ko etahi atu korero mo te hanganga MSI i Magento 2 ka kitea i roto i te tuhinga "Te punaha whakahaere whare putunga ma te whakamahi i te CQRS me te Mahinga Takahanga. Hoahoa".
Ka whakamahia e ahau te whirihoranga taunoa me te taapiri i nga korero katoa ki te puna default, e uru ana ki te hongere hoko e hono ana ki te paetukutuku me te waehere base (e rite ana ki te pito o mua o te toa - tirohia store_website):
Whai muri i te taapiri i nga raraunga raarangi ki te hua i te papa whakahaere, ka whiwhi koe i tenei pikitia:
Pāpāho
Ina "a-ringa" te taapiri i tetahi ahua ki tetahi hua ma te roopu whakahaere, ka tuhia nga korero e tika ana ki nga ripanga e whai ake nei:
catalog_product_entity_media_gallery: rehita pāpāho (whakaahua me nga konae ataata);
catalog_product_entity_media_gallery_value: te hono i te hunga pāpāho ki nga hua me nga whakaaturanga (te rohenga);
catalog_product_entity_media_gallery_value_to_entity: te hono i te hunga pāpāho ki nga hua anake (te mea he ihirangi pāpāho taunoa mo te hua);
catalog_product_entity_varchar: Ko nga mahi e whakamahia ai te ahua ka rongoa ki konei;
a ko nga whakaahua ano ka tiakina ki te raarangi ./pub/media/catalog/product/x/y/te wahi x и y — nga reta tuatahi me te tuarua o te ingoa konae whakaahua. Hei tauira, kōnae image.png kia ora hei ./pub/media/catalog/product/i/m/image.png, kia taea ai e te papaaho te whakamahi hei ahua i te wa e whakaahua ana i nga hua mai i te raarangi.
catalog_product_entity_media_gallery
Rēhita kua tukuna ki roto ./pub/media/catalog/product/ kōnae pāpāho (kaore i te korerohia te tukanga o te whakatakoto i te konae ake i tenei tuhinga):
Ka honoa e matou te konae pāpāho kua rehitatia me te hua e rite ana me te kore e herea ki tetahi toa toa. Kaore i te maarama kei hea te whakamahi i enei raraunga me te aha e kore e taea te uru atu ki nga raraunga mai i te ripanga o mua, engari kei te noho tonu tenei ripanga ka tuhia nga raraunga ki a ia ka taapirihia he pikitia ki te hua. Na ko tena.
Ka taea te whakamahi i tetahi konae pāpāho me nga mahi rereke (kua tohuhia te waehere huanga e rite ana ki roto i nga reu):
turanga(image)
Atahanga Iti (small_image)
Karakōnui (thumbnail)
Atahanga Swatch (swatch_image)
Ko te hono i nga mahi ki tetahi konae pāpāho te mea ka tupu i roto catalog_product_entity_varchar. He rite te waehere here ki te waehere kei te "Nga huanga hua taketake".
I muri i te taapiri i tetahi ahua ki te hua i roto i te papa whakahaere ka penei te ahua:
Ngā Kāwai
Ripanga matua kei roto nga raraunga ma te waahanga:
catalog_category_entity: rehita o nga waahanga;
catalog_category_product: hononga i waenga i nga hua me nga waahanga;
catalog_category_entity_*: Uara huanga EAV;
I te timatanga, i roto i te tono Magento kau, kei roto i te rehitatanga waahanga e 2 nga waahanga (I whakapotohia e ahau nga ingoa pou: crt - created_at, upd - updated_at):
Ko te kāwai whai id=1 te putake o te katoa o te putumōhio Magento, ā, kāore i te wātea i te pae whakahaere, i te whārangi o mua rānei. Kāwai whai id=2 (Kāwai Taunoa) ko te waahanga pakiaka mo te toa matua o te pae matua (Toa Paetukutuku Matua) i hangaia i te wa e tukuna ana te tono (tirohia. Kaiwhakahaere / Toa / Toa Katoa). Ano, ko te waahanga pakiaka o te toa kaore ano i te waatea i mua, ko nga waahanga iti anake.
I te mea ko te kaupapa o tenei tuhinga kei te kawemai tonu i nga raraunga mo nga hua, kaore au e whakamahi i te urunga tika ki roto i te papaarangi i te wa e hanga ana nga waahanga, engari ka whakamahi i nga karaehe e whakaratohia ana e Magento ake (tauira me nga putunga). Ko te urunga tika ki roto i te patengi raraunga ka whakamahia anake ki te hono i te hua kawemai ki tetahi waahanga (kua whakaoritehia te waahanga ki tona ingoa, a ka tikina te id waahanga i te wa e whakataurite ana):
Nga hua kei te papa whakahaere i muri i te mahi i etahi atu mahi:
a ki mua:
Whakarāpopoto
Ko te huinga o nga hua (10 nga waahanga) pera i te tuhinga o mua ka kawemai i te iti rawa o te raupapa o te rahi tere (1 te rua ki te 10). Kia tika ake te whakatau i te tere, me nui ake nga hua - he maha nga rau, he pai ake ranei nga mano. Heoi, ahakoa he iti te rahi o nga raraunga whakauru, ka taea e taatau te whakatau he mea nui te whakamahi i nga taputapu e whakaratohia ana e Magento (tauira me nga whare putunga) (Ka whakanui ahau - nui!) tere te whanaketanga o nga mahi e hiahiatia ana, engari i te wa ano ka tino nui (ka whakanui ahau - nui!) whakaitihia te tere o te urunga o nga raraunga ki roto i te papanga raraunga.
Ko te mutunga mai, kua makuku te wai, ehara tenei i te whakakitenga. Heoi, inaianei kei a au te tohu hei takaro, a tera pea ka tae ki etahi whakatau pai ake.