Magento 2: hoʻokomo pololei i nā huahana i ka waihona
В ʻatikala mua Ua wehewehe au i ke kaʻina hana o ka lawe ʻana i nā huahana i Magento 2 ma ke ʻano maʻamau - ma o nā hiʻohiʻona a me nā waihona. ʻO ke ala maʻamau he haʻahaʻa haʻahaʻa loa ka wikiwiki o ka hoʻoili ʻikepili. E hana ana ka'u pona ma kahi o ho'okahi huahana no kekona. Ma kēia hoʻomau, noʻonoʻo wau i kahi ala ʻē aʻe e hoʻokomo ai i kahi huahana - ma ke komo pololei ʻana i ka waihona, ke kaʻe ʻana i nā mīkini Magento 2 maʻamau (nā kumu hoʻohālike, nā hale hana, nā waihona). Hiki ke hoʻololi ʻia ke kaʻina o nā ʻanuʻu e hoʻokomo i nā huahana i kekahi ʻōlelo papahana e hiki ke hana me MySQL.
Akahana: Loaʻa iā Magento nā hana i mākaukau no lawe ʻikepili a, ʻoi aku paha, e lawa ia iā ʻoe. Eia nō naʻe, inā makemake ʻoe i ka mana piha ma luna o ke kaʻina hana hoʻokomo, ʻaʻole i kaupalena ʻia i ka hoʻomākaukau ʻana i kahi faila CSV no kāu mea, e hoʻokipa i ka pōpoki.
Hiki ke ʻike ʻia ke code i loaʻa mai ka kākau ʻana i nā ʻatikala ʻelua ma ka module Magento "flancer32/mage2_ext_demo_import". Eia kekahi mau kapu aʻu i hahai ai e hoʻomaʻamaʻa i ka code module demo:
Hoʻokumu wale ʻia nā huahana, ʻaʻole hōʻano hou.
Hoʻokahi hale kūʻai
Hoʻokomo ʻia nā inoa waeʻano wale nō, me ka ʻole o ko lākou ʻano
Hoʻopili nā hale ʻikepili i ka mana 2.3
JSON no ka lawe ʻana i hoʻokahi huahana:
{
"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"
}
ʻO ka nānā ʻana i nā pae nui o ka lawe ʻana mai
kakau inoa o ka huahana ponoi
ka pilina ma waena o ka huahana a me ka pūnaewele
ʻano huahana kumu (EAV)
ʻikepili waihona (nui o ka huahana i loko o ka waihona)
media (nā kiʻi)
pili me nā kāwai puke
Kakau inoa huahana
Hiki ke loaʻa ka ʻike kumu huahana ma 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`)
)
ʻO ka ʻike liʻiliʻi i koi ʻia no ka hana ʻana i kahi komo i ka papa inoa huahana:
attribute_set_id
sku
hou:
type_id - inā ʻaʻole mākou e wehewehe, a laila e hoʻohana ʻia ka 'maʻalahi'
No ke kākau pololei ʻana i ka waihona, hoʻohana wau i ka adapter DB o Magento ponoʻī:
ʻAʻohe inoa a wehewehe ʻana paha i ka huahana i hoʻopaʻa inoa hou ʻia. Hana ʻia kēia mau mea a pau Nā hiʻohiʻona EAV. Eia ka papa inoa o nā ʻano huahana kumu e pono ai e hōʻike pololei ʻia ka huahana ma ke alo:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Hoʻohui ʻia kahi ʻano ʻokoʻa i kahi huahana e like me kēia (ua kāpae ʻia nā kikoʻī o ka loaʻa ʻana o ka mea ʻike a me ke ʻano o ka ʻano mai kāna code):
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);
}
}
Ke hoʻohana nei i ka code attribute, hoʻoholo mākou i kona id a me ke ʻano ʻikepili (datetime, decimal, int, text, varchar), a laila e kākau i ka ʻikepili no ka puka makani hoʻokele i loko o ka pākaukau kūpono (store_id = 0).
Ma hope o ka hoʻohui ʻana i nā ʻano i luna i ka huahana, loaʻa iā ʻoe kēia kiʻi ma ka panel admin:
ʻikepili waihona
E hoʻomaka ana mai ka mana 2.3 ma Magento, aia ʻelua mau papaʻaina like ʻole e hāʻawi i ka mālama ʻana i ka ʻike waihona (ka nui o nā huahana):
cataloginventory_*: hale kahiko;
inventory_*: hale hou (MSI - Multi Source Inventory);
Pono ʻoe e hoʻohui i ka ʻikepili waihona i nā hale ʻelua, no ka mea ʻAʻole kūʻokoʻa loa ka hale hou i ka mea kahiko (ʻo ia paha no default hale kūʻai i loko o ka hale hou e pili ana i kahi papaʻaina cataloginventory_stock_status e like me inventory_stock_1).
papa inoa
I ka hoʻoili ʻana iā Magneto 2.3, loaʻa iā mākou nā helu 2 i loko store_website, e pili ana i ʻelua mau pūnaewele - hoʻokele a me ka mea kūʻai nui:
ʻO ia hoʻi, i loko o kā mākou hale kahiko hoʻokahi wale nō "hale hale kūʻai" (stock) a ua hoʻopili ʻia i ka pūnaewele hoʻokele. Hoʻohui i nā mea hou ma o ka admin panel sources/stocks ma MSI (ka hoʻolālā hou) ʻaʻole i loaʻa nā mea hou i loko cataloginventory_stock.
Hoʻopaʻa mua ʻia ka ʻikepili waihona e pili ana i nā huahana i ka hale kahiko ma nā papa:
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);
}
waihona_
I ka hoʻomaka ʻana, ʻo ka hoʻolālā hou no ka mālama ʻana i ka ʻikepili waihona he 1 "kumu"(inventory_source):
«Puna» e hōʻike ana i ka mālama kino no nā huahana (ʻo ia ka moʻolelo i nā hoʻonohonoho kino a me ka helu leka uila). "Hale kūʻai"he hui kūpono o kekahi mau "kumu" (inventory_source_stock_link)
i ka pae kahi e pili ai i ke ala kūʻai (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Ma ka hoʻoholo ʻana i ka hoʻolālā ʻikepili, manaʻo ʻia nā ʻano o nā kaila kūʻai, akā ma ka maʻamau ʻo ka pilina "kumukuai"-"paena"(ʻO ka loulou i ka pūnaewele ma muli o ke code pūnaewele - base).
ʻekahi "hale ukana"hiki ke hoʻopili ʻia i kekahi mau"kumu wai"a hoʻokahi"kumu"- i kekahi mau"hale kūʻai"(ka pilina many-to-many). He paʻamau nā ʻokoʻa "kumu"A"hale ukana". ʻAʻole lākou i hoʻopili hou ʻia i nā hui ʻē aʻe (ka palena ma ka pae code - ka hewa "ʻAʻole hiki ke mālama i ka loulou pili i ke Kumu Paʻamau a i ʻole Stock Default"). Hiki ke loaʻa nā kikoʻī hou aku e pili ana i ka hoʻolālā MSI ma Magento 2 ma ka ʻatikala "Pūnaehana hoʻokele hale kūʻai me CQRS a me Event Sourcing. Hoʻolālā".
E hoʻohana wau i ka hoʻonohonoho paʻamau a hoʻohui i nā ʻike āpau āpau i ke kumu default, ka mea e pili ana i ke ala kūʻai e pili ana i ka pūnaewele me ke code base (e pili ana i ka hope mua o ka hale kūʻai - ʻike store_website):
Ma hope o ka hoʻohui ʻana i ka ʻikepili waiwai i ka huahana ma ka panel admin, loaʻa iā ʻoe kēia kiʻi:
Lāpaho
Ke hoʻohui "manual" i kahi kiʻi i kahi huahana ma o ka admin panel, kākau ʻia ka ʻike pili i nā papa aʻe:
catalog_product_entity_media_gallery: ke kākau inoa media (nā kiʻi a me nā faila wikiō);
catalog_product_entity_media_gallery_value: ka hoʻopili ʻana i nā media i nā huahana a me nā hōʻikeʻike (localization);
catalog_product_entity_media_gallery_value_to_entity: ka hoʻopili ʻana i ka pāpaho i nā huahana wale nō (ma ke ʻano he maʻiʻo media paʻamau no ka huahana);
catalog_product_entity_varchar: Ua mālama ʻia nā kuleana i hoʻohana ʻia ai ke kiʻi ma ʻaneʻi;
a mālama ʻia nā kiʻi i ka papa kuhikuhi ./pub/media/catalog/product/x/y/kahi x и y - ka hua mua a me ka lua o ka inoa faila kiʻi. No ka laʻana, faila image.png pono e mālama ʻia e like me ./pub/media/catalog/product/i/m/image.png, i hiki i ka paepae ke hoʻohana ia mea ma ke ʻano he kiʻi i ka wehewehe ʻana i nā huahana mai ka papa inoa.
catalog_product_entity_media_gallery
Hoʻopaʻa inoa ʻia ma ./pub/media/catalog/product/ waihona media (ʻaʻole i kūkākūkā ʻia ke kaʻina hana o ka waiho ʻana i ka faila ma kēia ʻatikala):
Hoʻopili mākou i ka faila media i hoʻopaʻa ʻia me ka huahana pili ʻole me ka nakinaki ʻole ʻia i kekahi hale kūʻai. ʻAʻole maopopo i kahi i hoʻohana ʻia ai kēia ʻikepili a no ke aha i hiki ʻole ai ke komo i ka ʻikepili mai ka papa mua, akā aia kēia papa a kākau ʻia ka ʻikepili iā ia ke hoʻohui ʻia kahi kiʻi i ka huahana. No laila ʻo ia.
Hiki ke hoʻohana ʻia kahi faila media me nā kuleana like ʻole (e hōʻike ʻia ke code hiʻona e pili ana i nā pale):
kumu(image)
Kiʻi liʻiliʻi (small_image)
Kiʻi liʻiliʻi (thumbnail)
Kiʻi Swatch (swatch_image)
ʻO ka hoʻopili ʻana i nā kuleana i kahi faila media ka mea e hana ai i loko catalog_product_entity_varchar. Ua like ke code paʻa me ke code ma ka "Nā hiʻohiʻona huahana kumu".
Ma hope o ka hoʻohui ʻana i kahi kiʻi i ka huahana ma ka admin panel e like me kēia:
Māhele
Nā papa nui i loaʻa ka ʻikepili ma ka waeʻano:
catalog_category_entity: kakau inoa o na mahele;
catalog_category_product: ka pilina ma waena o nā huahana a me nā waeʻano;
catalog_category_entity_*: Nā waiwai waiwai EAV;
I ka hoʻomaka ʻana, i loko o kahi noi Magento ʻole, aia ka papa inoa o ka waeʻano he 2 mau ʻāpana (Ua pōkole wau i nā inoa kolamu: crt - created_at, upd - updated_at):
ʻO ka māhele me ka id=1 ke kumu o ka papa inoa Magento holoʻokoʻa a ʻaʻole i loaʻa ma ka papa admin a i ʻole ma ka ʻaoʻao mua. Māhele me ka id=2 (Māhele Default) ʻo ia ke kumu kumu no ka hale kūʻai nui o ka pūnaewele (Hale Kūʻai Pūnaewele Nui) i hana ʻia ke kau ʻia ka noi (e ʻike. Admin / Halekuai / Halekuai a pau). Eia kekahi, ʻaʻole i loaʻa ka ʻāpana kumu o ka hale kūʻai ma mua, ʻo kāna mau subcategories wale nō.
No ka mea e hoʻokomo mau ana ke kumuhana o kēia ʻatikala i ka ʻikepili i nā huahana, ʻaʻole wau e hoʻohana i ke komo pololei i ka waihona i ka wā e hana ai i nā ʻāpana, akā e hoʻohana i nā papa i hāʻawi ʻia e Magento ponoʻī (nā hiʻohiʻona a me nā waihona). Hoʻohana ʻia ke komo pololei ʻana i ka waihona no ka hoʻopili ʻana i ka huahana i lawe ʻia mai me kahi ʻāpana (ua hoʻohālikelike ʻia ka waeʻāina me kona inoa, a kiʻi ʻia ka id waeʻano i ka wā hoʻohālikelike):
Nā huahana i ka admin panel ma hope o ka hana ʻana i nā hana hou aʻe:
a ma ke alo:
Hōʻuluʻulu
ʻO ka pūʻulu like o nā huahana (10 mau ʻāpana) e like me ka ʻatikala mua i lawe ʻia ma kahi o ka ʻoi aku ka nui o ka wikiwiki (1 kekona versus 10). No ka hoʻohālikelike pololei ʻana i ka wikiwiki, pono ʻoe i kahi helu nui o nā huahana - he mau haneli, a ʻoi aku paha nā tausani. Eia nō naʻe, ʻoiai me ka liʻiliʻi liʻiliʻi o ka ʻikepili hoʻokomo, hiki iā mākou ke hoʻoholo i ka hoʻohana ʻana i nā mea hana i hāʻawi ʻia e Magento (nā hiʻohiʻona a me nā repositories) he mea nui (koʻikoʻi wau - nui!) e wikiwiki i ka hoʻomohala ʻana i nā hana i koi ʻia, akā i ka manawa like me ka nui (koʻikoʻi wau - nui!) e hoemi i ka wikiwiki e komo ai ka ikepili i ka waihona.
ʻO ka hopena, ua lilo ka wai i pulu a ʻaʻole kēia he hōʻike. Eia naʻe, i kēia manawa ua loaʻa iaʻu ke code e pāʻani ai a hiki paha i kekahi mau hopena hoihoi.