Π maqaal hore Waxaan ku tilmaamay habka soo dejinta alaabooyinka Magento 2 sida caadiga ah - iyada oo loo marayo moodooyinka iyo kaydinta. Habka caadiga ah wuxuu leeyahay xawaare farsamaynta xogta oo aad u hooseeya. Laptop-kaygu wuxuu soo saarayay qiyaastii hal badeeco ilbiriqsikii. Sii wadidan, waxaan tixgelinayaa hab kale oo lagu soo dejiyo badeecad - iyadoo si toos ah loo galo xogta xogta, iyada oo laga gudbayo hababka caadiga ah ee Magento 2 ( moodooyinka, warshadaha, kaydka). Taxanaha tillaabooyinka soo dejinta badeecadaha waxaa lagu waafajin karaa luqad kasta oo barnaamij ah oo la shaqayn karta MySQL.
Afeef: Magento waxa uu leeyahay shaqayn diyaarsan oo loogu talagalay soo dejinta xogta iyo, waxay u badan tahay, inay kugu filnaan doonto. Si kastaba ha noqotee, haddii aad u baahan tahay xakameyn dhammaystiran oo ku saabsan habka soo dejinta, oo aan ku xaddidnayn diyaarinta faylka CSV waxa aad haysato, ku soo dhawoow bisad.
Koodhka ka soo baxa qoritaanka labada maqaal waxaa laga eegi karaa moduleka Magento"flancer32/mage2_ext_demo_import" Waa kuwan qaar ka mid ah xayiraadaha aan raacay si aan u fududeeyo koodhka moduleka demo:
Alaabooyinka waa la abuuray oo kaliya, lama cusboonaysiiyo.
Hal bakhaar
Magacyada qaybta kaliya ayaa la soo dhoofiyaa, iyada oo aan la hayn qaabdhismeedkooda
Alaabta cusub ee la diwaan galiyay wali ma laha magac ama sharaxaad. Waxaas oo dhan waa la sameeyaa Tilmaamaha EAV. Waa kuwan liiska sifooyinka aasaasiga ah ee loo baahan yahay si alaabta si sax ah loogu muujiyo dhinaca hore:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Sifo gaar ah ayaa lagu daraa badeecad sidan oo kale ah (faahfaahinta helitaanka aqoonsiga iyo nooca sifada koodkeeda waa laga saaray):
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);
}
}
Isticmaalka summada sifada, waxaan go'aaminnaa id iyo nooca xogta (datetime, decimal, int, text, varchar), ka dibna ku qor xogta daaqada maamulka miiska ku habboon (store_id = 0).
Kadib markaad ku darto sifooyinka kore ee alaabta, waxaad sawirkan ka heleysaa guddiga maamulka:
Xogta alaabada
Laga bilaabo nooca 2.3 ee Magento, waxaa jira laba jaantus oo isbarbar socda oo bixiya kaydinta macluumaadka alaabada (tirada alaabta):
cataloginventory_*: qaab dhismeed hore;
inventory_*: qaab-dhismeed cusub (MSI - Multi Source Inventory);
Waxaad u baahan tahay inaad ku darto xogta alaabada labada qaab, sababtoo ah Qaab dhismeedka cusub ayaan weli si buuxda uga madaxbannaanayn kii hore (waxay u badan tahay in default bakhaar ku yaal qaab dhismeedka cusub miis ayaa ku lug leh cataloginventory_stock_status sida inventory_stock_1).
kataloginventory_
Marka la daabulayo Magneto 2.3 waxaan marka hore haysanaa 2 gelis store_website, taas oo u dhiganta laba goobood - maamulka iyo macmiilka ugu weyn:
Taasi waa, qaab-dhismeedkayagii hore waxaa ku yaal hal "bakhaar" oo keliya (stock) waxayna ku xidhan tahay mareegaha maamulka. Ku darida kuwa cusub iyada oo loo marayo guddiga maamulka sources/stocks MSI (qaab-dhismeedka cusub) ma keenayso gelitaan cusub cataloginventory_stock.
Xogta alaabada ee ku saabsan alaabtii qaabdhismeedkii hore ayaa markii hore lagu diiwaan geliyay shaxanka:
cataloginventory_stock_item
cataloginventory_stock_status
kataloginventory_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);
}
katalooginventory_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);
}
alaab_
Markii hore, qaab dhismeedka cusub ee kaydinta xogta alaabada ayaa ka kooban 1 "ilaha"(inventory_source):
type |code|stock_id|
-------|----|--------|
website|base| 1|
Marka la eego qaab dhismeedka xogta, noocyada kala duwan ee kanaalada iibka ayaa loo maleynayaa, laakiin asal ahaan kaliya xiriirka "stock"-"website"(isku xirka website-ku wuxuu raacayaa lambarka shabakada - base).
Mid"bakhaar"waxaa lagu xiri karaa dhowr"ilo"iyo mid"ilaha"- dhowr"bakhaarrada"(xidhiidh badan-ilaa-badan). Ka-reebitaanka ayaa ah mid aan caadi ahayn'ilaha"Iyo"bakhaar" Dib looguma xidhin hay'ado kale (xaddidaad heerka koodhka - qaladka "Ma kaydin karo isku xirka la xidhiidha Isha ugu horaysa ama kaydka ugu tala galay"). Faahfaahin dheeraad ah oo ku saabsan qaabka MSI ee Magento 2 waxaa laga heli karaa maqaalka "Nidaamka maaraynta bakhaarka iyadoo la adeegsanayo CQRS iyo Isha Dhacdada. NaqshadeyntaΒ«.
Waxaan isticmaali doonaa qaabeynta caadiga ah waxaanan ku dari doonaa dhammaan macluumaadka alaabada isha default, kaas oo ku lug leh kanaalka iibka ee la xidhiidha bogga internetka ee koodhka base (waxay la mid tahay dhamaadka hore ee dukaanka - eeg store_website):
catalog_product_entity_media_gallery_value_to_entity: ku xidhidhiyaha warbaahinta alaabada oo kaliya (waxa loo malaynayaa in ay saxaafaddu ka kooban tahay badeecada);
catalog_product_entity_varchar: Doorarka sawirka loo adeegsaday halkan ayaa lagu kaydiyaa;
sawirada laftoodana waxaa lagu kaydiyaa hagaha ./pub/media/catalog/product/x/y/halkaas oo x ΠΈ y - xarfaha koowaad iyo labaad ee magaca faylka sawirka. Tusaale ahaan, fayl image.png waa in la badbaadiyo sida ./pub/media/catalog/product/i/m/image.png, si ay madalku u isticmaali karto sawir ahaan marka la tilmaamayo alaabada buug-yaraha.
Waxaanu ku xidhxidhnaa faylka warbaahinta ee diiwaangashan badeecada u dhiganta iyadoon lagu xidhin wax bakhaar ah. Ma cadda halka saxda ah ee xogtan laga isticmaalo iyo sababta aanay suurtogal u ahayn in xogta laga helo shaxda hore, laakiin shaxdani waa jirtaa oo xogta ayaa loo qoraa marka sawirka lagu daro alaabta. Markaa waa taas.
Qaybta leh id=1 waa xididka dhammaan buuga Magento oo aan laga heli karin guddiga maamulka ama bogga hore. Qaybta leh id=2 (Qaybta asalka ah) waa qaybta asalka u ah dukaanka weyn ee goobta (Dukaanka Mareegaha Weyn) la sameeyay marka codsiga la geeyo (eeg. Maamulka / Dukaamada / Dhammaan Bakhaarada). Waxaa intaa dheer, qaybta asalka ah ee dukaanka laftiisa sidoo kale lagama heli karo xagga hore, kaliya qaybaha hoose.
Maadaama mawduuca maqaalkani uu wali soo dejinayo xogta alaabta, ma isticmaali doono gelitaanka tooska ah ee xogta marka la abuurayo qaybaha, laakiin waxaan isticmaali doonaa fasalada ay bixiso Magento lafteeda (qaababka iyo kaydka). Gelida tooska ah ee xogta xogta waxa kaliya oo loo adeegsadaa in lagu xidho badeecada la soo dejiyay qayb (qaybtu waxa ay la mid tahay magaceeda, iyo aqoonsiga qaybta waxa la soo saaray marka la isbarbardhigayo):
Alaabooyinka ku jira guddiga maamulka ka dib marka la sameeyo ficillo dheeraad ah:
dhanka horena:
Soo koobid
Qalabka isku midka ah (10 xabbo) sida maqaalkii hore ayaa la soo dhoofiyaa ugu yaraan amar xawli ah (1 ilbiriqsi oo ka soo horjeeda 10). Si aad si sax ah u qiyaasto xawaaraha, waxaad u baahan tahay tiro badan oo badeecooyin ah - dhowr boqol, ama kumanaan ka sii fiican. Si kastaba ha ahaatee, xitaa iyada oo cabbirka yar ee xogta gelinta, waxaan ku soo gabagabeyn karnaa in isticmaalka qalabka ay bixiso Magento (moodooyinka iyo kaydinta) ay muhiim tahay (waxaan xoogga saarayaa - badan!) dedejiso horumarinta shaqada loo baahan yahay, laakiin isla mar ahaantaana si weyn (waxaan xooga saarayaa - badan!) Yaree xawaaraha ay xogtu ku gasho kaydka xogta.
Natiijo ahaan, biyihii waxay noqdeen kuwo qoyan, tanina maaha wax muujin. Si kastaba ha noqotee, hadda waxaan haystaa koodka aan ku ciyaaro waxaana laga yaabaa inaan imaado gabagabo xiiso badan.