ProHoster > Blag > Riarachán > Magento 2: táirgí a allmhairiú go díreach isteach sa bhunachar sonraí
Magento 2: táirgí a allmhairiú go díreach isteach sa bhunachar sonraí
В alt roimhe seo Rinne mé cur síos ar an bpróiseas maidir le táirgí a allmhairiú isteach i Magento 2 ar an ngnáthbhealach - trí mhúnlaí agus stórtha. Tá luas próiseála sonraí an-íseal ag an modh is gnách. Bhí mo ríomhaire glúine ag táirgeadh thart ar tháirge amháin in aghaidh an tsoicind. Sa leanúint seo, breithním ar bhealach eile chun táirge a allmhairiú - trí iontráil dhíreach a dhéanamh sa bhunachar sonraí, ag seachaint meicníochtaí caighdeánacha Magento 2 (samhlacha, monarchana, stórtha). Is féidir seicheamh na gcéimeanna chun táirgí a allmhairiú a oiriúnú d’aon teanga ríomhchlárúcháin ar féidir oibriú le MySQL.
Séanadh: Tá feidhmiúlacht réidh-déanta ag Magento le haghaidh allmhairiú sonraí agus, is dócha, beidh sé go leor duit. Mar sin féin, má tá smacht níos iomláine ag teastáil uait ar an bpróiseas allmhairithe, gan a bheith teoranta do chomhad CSV a ullmhú don mhéid atá agat, fáilte romhat chuig cat.
Is féidir an cód a tháinig as an dá alt a scríobh a fheiceáil sa mhodúl Magento "flancer32/mage2_ext_demo_import“. Seo roinnt srianta a lean mé chun cód an mhodúil taispeána a shimpliú:
Ní chruthaítear táirgí ach amháin, ní nuashonraítear iad.
Stóras amháin
Ní allmhairítear ach ainmneacha catagóir, gan a struchtúr
Comhlíonann struchtúir sonraí leagan 2.3
JSON chun táirge amháin a iompórtáil:
{
"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"
}
Forbhreathnú ar na príomhchéimeanna allmhairithe
clárú an táirge féin
nasc idir an táirge agus an suíomh Gréasáin
tréithe bunúsacha an táirge (EAV)
sonraí fardail (cainníocht an táirge sa stoc)
meáin (pictiúir)
nasc le catagóirí catalóg
Clárú Táirge
Is féidir faisnéis bhunúsach táirge a fháil i 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`)
)
Is é an t-íosmhéid faisnéise a theastaíonn chun iontráil a chruthú sa chlár táirgí:
attribute_set_id
sku
breise:
type_id — mura sonraímid é, bainfear úsáid as 'simplí'
Chun scríobh go díreach chuig an mbunachar sonraí, úsáidim an cuibheoir DB de Magento féin:
Níl ainm ná tuairisc ar an táirge nuachláraithe fós. Déantar é seo go léir tríd tréithe EAV. Seo liosta de bhuntréithe an táirge a theastaíonn chun an táirge a thaispeáint i gceart ar an tosach:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Cuirtear aitreabúid ar leith le táirge mar seo (fágtar ar lár na sonraí maidir le haitheantóir agus cineál na haise a fháil óna chód):
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);
}
}
Agus an cód aitreabúide á úsáid againn, cinnimid a aitheantas agus a chineál sonraí (datetime, decimal, int, text, varchar), ansin scríobh na sonraí don fhuinneog riaracháin isteach sa tábla cuí (store_id = 0).
Tar éis duit na tréithe thuas a chur leis an táirge, gheobhaidh tú an pictiúr seo sa phainéal riaracháin:
Sonraí fardail
Ag tosú ó leagan 2.3 i Magento, tá dhá thacar comhthreomhara táblaí a sholáthraíonn faisnéis fardail a stóráil (cainníocht an táirge):
cataloginventory_*: seanstruchtúr;
inventory_*: struchtúr nua (MSI - Fardal Ilfhoinsí);
Ní mór duit sonraí fardail a chur leis an dá struchtúr, mar gheall ar níl an struchtúr nua go hiomlán neamhspleách ar an seancheann fós (is beag seans go mbeidh do default stóras sa struchtúr nua tá tábla i gceist cataloginventory_stock_status mar inventory_stock_1).
liosta chatalóg_
Nuair a bhíonn Magneto 2.3 á imscaradh tá 2 iontráil isteach againn ar dtús store_website, a fhreagraíonn do dhá shuíomh - riaracháin agus príomhchliant:
Is é sin, inár sean-struchtúr níl ach “stóras” amháin (stock) agus tá sé nasctha leis an suíomh Gréasáin riaracháin. Cinn nua a chur leis tríd an bpainéal riaracháin sources/stocks in MSI (struchtúr nua) ní bhíonn iontrálacha nua i cataloginventory_stock.
Déantar sonraí fardail faoi tháirgí sa seanstruchtúr a thaifeadadh ar dtús i dtáblaí:
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);
}
fardal_
Ar dtús, tá 1 " sa struchtúr nua chun sonraí fardail a stóráilfhoinse'(inventory_source):
«Foinse» seasann sé don stóráil fhisiciúil do tháirgí (tá comhordanáidí fisiceacha agus seoladh poist sa taifead). "Trádstóras"Is aontas loighciúil de roinnt "foinsí" (inventory_source_stock_link)
ag an leibhéal ag a dtarlaíonn an nasc leis an gcainéal díolacháin (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Agus an struchtúr sonraí á mheas, glactar leis na cineálacha éagsúla bealaí díolacháin, ach de réir réamhshocraithe amháin an nasc “stoc"-"láithreán gréasáin"(leanann an nasc chuig an suíomh Gréasáin cód an tsuímh Ghréasáin - base).
a haon"stóras"is féidir é a nascadh le roinnt"le foinsí"agus ceann"fhoinse" - go roinnt"stórais“(gaol go leor le go leor). Tá na heisceachtaí réamhshocraithe "fhoinse"Agus"stóras“. Níl siad athnasctha le haonáin eile (teorainn ar leibhéal an chóid - an earráid “Ní féidir nasc a bhaineann le Foinse Réamhshocraithe nó Stoc Réamhshocraithe a shábháil"). Tá tuilleadh sonraí faoin struchtúr MSI i Magento 2 le fáil san alt “Córas bainistíochta stórais ag baint úsáide as CQRS agus Foinsiú Imeachtaí. Dearadh".
Úsáidfidh mé an chumraíocht réamhshocraithe agus cuirfidh mé an fhaisnéis fardail go léir leis an bhfoinse default, a bhfuil baint acu leis an gcainéal díolacháin a bhaineann leis an láithreán gréasáin leis an gcód base (a fhreagraíonn do cheann tosaigh an siopa - féach store_website):
Tar éis duit sonraí fardail a chur leis an táirge sa phainéal riaracháin, gheobhaidh tú an pictiúr seo:
Meáin
Nuair a chuirtear íomhá “de láimh” le táirge tríd an bpainéal riaracháin, scríobhtar síos an fhaisnéis ábhartha sna táblaí seo a leanas:
catalog_product_entity_media_gallery: clárlann na meán (íomhánna agus comhaid físe);
catalog_product_entity_media_gallery_value: na meáin a nascadh le táirgí agus taispeántais (logánú);
catalog_product_entity_media_gallery_value_to_entity: meáin a nascadh le táirgí amháin (ábhar meán réamhshocraithe don táirge is dócha);
catalog_product_entity_varchar: Stóráiltear na róil ina n-úsáidtear an íomhá anseo;
agus déantar na híomhánna féin a shábháil ar an eolaire ./pub/media/catalog/product/x/y/I gcás ina x и y — an chéad litir agus an dara litir d'ainm an chomhaid íomhá. Mar shampla, comhad image.png chóir a shábháil mar ./pub/media/catalog/product/i/m/image.png, ionas gur féidir leis an ardán é a úsáid mar íomhá agus é ag cur síos ar tháirgí ón gcatalóg.
catalog_product_entity_media_gallery
Clár postáilte i ./pub/media/catalog/product/ comhad meán (ní phléitear an próiseas chun an comhad féin a chur san alt seo):
Déanaimid an comhad meán cláraithe a nascadh leis an táirge comhfhreagrach gan a bheith ceangailte le haon aghaidh siopa. Níl sé soiléir cén áit go díreach a úsáidtear na sonraí seo agus cén fáth go bhfuil sé dodhéanta rochtain a fháil ar na sonraí ón tábla roimhe seo, ach tá an tábla seo ann agus scríobhtar na sonraí chuige nuair a chuirtear pictiúr leis an táirge. Mar sin, sin é.
Is féidir comhad meán a úsáid le róil éagsúla (tá an cód aitreabúide comhfhreagrach le fios i lúibíní):
bonn(image)
Íomhá Bheag (small_image)
Mionsamhail (thumbnail)
Íomhá Swatch (swatch_image)
Is éard a tharlaíonn i róil a nascadh le comhad meán catalog_product_entity_varchar. Tá an cód ceangailteach cosúil leis an gcód sa "Buntréithe táirge".
Tar éis íomhá a chur leis an táirge sa phainéal riaracháin tá an chuma air seo:
Категории
Príomhtháblaí ina bhfuil sonraí de réir catagóire:
catalog_category_entity: clár na gcatagóirí;
catalog_category_product: nasc idir táirgí agus catagóirí;
Ar dtús, in iarratas Magento folamh, tá 2 chatagóir i gclárlann na gcatagóirí (ghiorraigh mé ainmneacha na gcolún: crt - created_at, upd - updated_at):
Is í an chatagóir le id=1 fréamh chatalóg iomlán Magento agus níl sé ar fáil sa phainéal riaracháin ná ar an leathanach tosaigh. Catagóir le haitheantas=2 (Catagóir Réamhshocraithe) an bunchatagóir do phríomhstóras an phríomhshuímh (Príomh-siopa Gréasáin) a cruthaíodh nuair a bhíonn an feidhmchlár imlonnaithe (féach. Riarachán / Stórais / Gach Store). Thairis sin, níl bunchatagóir an stórais féin ar fáil freisin ag an tosaigh, ach a chuid fochatagóirí.
Ós rud é go bhfuil ábhar an ailt seo fós ag iompórtáil sonraí ar tháirgí, ní úsáidfidh mé iontráil dhíreach sa bhunachar sonraí agus catagóirí á gcruthú agam, ach úsáidfidh mé na ranganna a sholáthraíonn Magento féin (samhlacha agus stórtha). Ní úsáidtear iontráil dhíreach isteach sa bhunachar sonraí ach amháin chun an táirge iompórtáilte a chomhcheangal le catagóir (déantar an chatagóir a mheaitseáil lena hainm, agus faightear aitheantas na catagóire le linn meaitseála):
Táirgí sa phainéal riaracháin tar éis gníomhartha breise a dhéanamh:
agus ag tosach:
Achoimre
Déantar an tsraith táirgí céanna (10 bpíosa) agus a bhí san alt roimhe seo a allmhairiú ar a laghad ord méide níos tapúla (1 soicind in aghaidh 10). Chun an luas a mheas níos cruinne, is gá duit líon níos mó táirgí - na céadta, nó níos fearr fós na mílte. Mar sin féin, fiú le méid chomh beag sonraí ionchuir, is féidir linn a thabhairt i gcrích go bhfuil úsáid na n-uirlisí a sholáthraíonn Magento (samhlacha agus stórtha) suntasach (cuirim béim ar - i bhfad níos!) dlús a chur le forbairt na feidhmiúlachta atá ag teastáil, ach ag an am céanna go suntasach (béim ar - i bhfad níos!) an luas a théann sonraí isteach sa bhunachar sonraí a laghdú.
Mar thoradh air sin, d'éirigh an t-uisce amach a bheith fliuch agus ní nochtadh é seo. Mar sin féin, anois tá an cód agam le himirt leis agus b'fhéidir teacht ar roinnt conclúidí níos suimiúla.