Magento hija soluzzjoni tal-kummerċ elettroniku, i.e. hija aktar immirata lejn il-bejgħ tal-prodotti milli lejn il-magazzinaġġ, il-loġistika jew il-kontabilità finanzjarja li jakkumpanjaw il-bejgħ. Applikazzjonijiet oħra (pereżempju, sistemi ERP) huma aktar adattati għall-applikazzjonijiet li jakkumpanjawhom. Għalhekk, ħafna drabi fil-prattika tal-użu ta 'Magento tqum il-kompitu li jintegra maħżen ma' dawn is-sistemi l-oħra (per eżempju, 1C).
B'mod ġenerali, l-integrazzjoni tista' titnaqqas għal replikazzjoni tad-dejta billi:
- katalgu (prodotti, kategoriji);
- data tal-inventarju (bilanċi tal-prodotti fl-imħażen u prezzijiet);
- klijenti;
- ordnijiet;
Magento joffri klassi separata ta' oġġetti għall-manipulazzjoni tad-dejta fid-database -
Il-klijenti u l-ordnijiet huma normalment replikati fid-direzzjoni l-oħra - minn Magento għal sistemi ERP esterni. Għalhekk, huwa aktar sempliċi magħhom, fuq in-naħa Magento għandek bżonn biss li tagħżel id-dejta xierqa, u mbagħad "balal tellgħu minn naħa tagħna".
Prinċipji ta' reġistrazzjoni ta' data f'database
Fil-mument, il-ħolqien ta 'oġġetti salvati fid-database b'mod programmatiku f'Magento isir permezz
function __construct (MagentoCmsModelBlockFactory $blockFactory) {
$this->blockFactory = $blockFactory;
}
/** @var MagentoCmsModelBlock $block */
$block = $this->blockFactory->create();
u l-kitba fid-database isir permezz
function __construct (MagentoCmsApiBlockRepositoryInterface $blockRepo) {
$this->blockRepo = $blockRepo;
}
$this->blockRepo->save($block);
L-approċċ "Fabbrika" u "Repożitorju" jista 'jintuża għall-mudelli ewlenin kollha fid-dominju Magento 2.
Informazzjoni Bażika dwar il-Prodott
Qed inħares lejn struttura tad-dejta li taqbel mal-verżjoni ta' Magento 2.3. L-aktar informazzjoni bażika dwar il-prodott tinsab fit-tabella catalog_product_entity
(reġistru tal-prodott):
entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at
Jien limitat għal tip wieħed ta' prodott (type_id='simple'
), sett ta' attributi default (attribute_set_id=4
) u jinjora l-attributi has_options
и required_options
. Peress li l-attributi entity_id
, created_at
и updated_at
huma ġġenerati awtomatikament, allura, fil-fatt, biex iżżid prodott ġdid, għandna bżonn biss li nissettjaw sku
. Nagħmel dan:
/** @var MagentoCatalogApiDataProductInterfaceFactory $factProd */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogApiDataProductInterface $prod */
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$repoProd->save($prod);
u nieħu eċċezzjoni:
The "Product Name" attribute value is empty. Set the attribute and try again.
Inżid l-isem tal-prodott mat-talba u nieħu messaġġ li l-attribut huwa nieqes Price
. Wara li żżid il-prezz, il-prodott jiġi miżjud mad-database:
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$prod->setName($name);
$prod->setPrice($price);
$repoProd->save($prod);
L-isem tal-prodott huwa maħżun fit-tabella tal-attribut varchar tal-prodott (catalog_product_entity_varchar
), prezz - fit-tabella catalog_product_entity_decimal
. Qabel ma żżid prodott, huwa rakkomandabbli li nindikaw b'mod espliċitu li qed nużaw il-faċċata amministrattiva għall-importazzjoni tad-dejta:
/** @var MagentoStoreModelStoreManagerInterface $manStore */
$manStore->setCurrentStore(0);
Attributi Addizzjonali
L-ipproċessar ta 'attributi addizzjonali tal-prodott bl-użu ta' Magento huwa ta 'pjaċir. Mudell tad-dejta tal-EAV għall-entitajiet ewlenin (ara t-tabella eav_entity_type
) hija waħda mill-karatteristiċi ewlenin ta' din il-pjattaforma. Aħna sempliċement inżidu l-attributi xierqa mal-mudell tal-prodott:
$prodEntity->setData('description', $desc);
$prodEntity->setData('short_description', $desc_short);
// или
$prodEntity->setDescription($desc);
$prodEntity->setShortDescription($desc_short);
u meta tissejvja l-mudell permezz tal-oġġett repo:
$repoProd->save($prod);
attributi addizzjonali se jinħażnu wkoll fit-tabelli tad-database korrispondenti.
Data tal-inventarju
F'termini sempliċi - l-ammont ta 'prodott fl-istokk. F'Magento 2.3, strutturi fid-database li jiddeskrivu l-format għall-ħażna tad-dejta tal-inventarju huma
/** @var MagentoCatalogModelProduct $prodEntity */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
$inventory = [
'is_in_stock' => true,
'qty' => 1234
];
$prodEntity->setData('quantity_and_stock_status', $inventory);
$repoProd->save($prodEntity);
Midja
Bħala regola, l-appoġġ tal-midja għal prodott għal klijent f'maħżen (kummerċ elettroniku) huwa differenti mill-appoġġ tal-midja għall-istess prodott għal impjegat f'sistema ta 'kontabilità interna (ERP). Fl-ewwel każ, huwa rakkomandabbli li turi l-prodott wiċċ imb wiċċ; fit-tieni, huwa biżżejjed li tingħata idea ġenerali tal-prodott. Madankollu, it-trasferiment tal-inqas l-immaġni primarja ta 'prodott huwa pjuttost komuni. case
meta timporta data.
Meta żżid immaġni permezz tal-pannell tal-amministrazzjoni, l-immaġni tiġi l-ewwel issejvjata f'direttorju temporanju (./pub/media/tmp/catalog/product
) u biss meta ssalva l-prodott jiġi mċaqlaq fid-direttorju tal-midja (./pub/media/catalog/product
). Ukoll, meta miżjuda permezz tal-pannell tal-amministrazzjoni, l-immaġni hija ttikkettata image
, small_image
, thumbnail
, swatch_image
.
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogModelProductGalleryCreateHandler $hndlGalleryCreate */
/* $imagePath = '/path/to/file.png'; $imagePathRelative = '/f/i/file.png' */
$imagePathRelative = $this->imagePlaceToTmpMedia($imagePath);
/* reload product with gallery data */
$product = $repoProd->get($sku);
/* add image to product's gallery */
$gallery['images'][] = [
'file' => $imagePathRelative,
'media_type' => 'image'
'label' => ''
];
$product->setData('media_gallery', $gallery);
/* set usage areas */
$product->setData('image', $imagePathRelative);
$product->setData('small_image', $imagePathRelative);
$product->setData('thumbnail', $imagePathRelative);
$product->setData('swatch_image', $imagePathRelative);
/* create product's gallery */
$hndlGalleryCreate->execute($product);
Għal xi raġuni, il-midja hija marbuta biss wara li l-ewwel issalva l-prodott u terġa 'tiġbor mir-repożitorju. U għandek bżonn tispeċifika l-attribut label
meta żżid dħul fil-gallerija tal-midja tal-prodott (inkella jkollna eċċezzjoni Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516
).
Категории
Ħafna drabi, l-istruttura tal-kategorija tal-maħżen u l-applikazzjoni backend jew it-tqegħid ta 'prodotti fihom jistgħu jvarjaw b'mod sinifikanti. Strateġiji għall-migrazzjoni tad-dejta dwar kategoriji u prodotti fi ħdanhom jiddependu fuq ħafna fatturi. F'dan l-eżempju nżomm ma' dan li ġej:
- Il-kategoriji tal-backend u tal-maħżen huma mqabbla bl-isem;
- jekk tiġi importata kategorija li mhix fil-maħżen, allura tinħoloq taħt il-kategorija tal-għeruq (
Default Category
) u l-pożizzjonament ulterjuri tiegħu fil-katalgu tal-maħżen huwa preżunt manwalment; - prodott huwa assenjat għal kategorija biss meta jinħoloq fil-maħżen (l-ewwel importazzjoni);
Informazzjoni bażika dwar il-kategorija tinsab fit-tabella catalog_category_entity
(katalgu tal-kategoriji). Il-ħolqien ta' kategorija f'Magento:
/** @var MagentoCatalogApiDataCategoryInterfaceFactory $factCat */
/** @var MagentoCatalogApiCategoryRepositoryInterface $repoCat */
$cat = $factCat->create();
$cat->setName($name);
$cat->setIsActive(true);
$repoCat->save($cat);
Ir-rabta ta' prodott ma' kategorija titwettaq bl-użu tal-ID tal-kategorija u l-SKU tal-prodott:
/** @var MagentoCatalogModelCategoryProductLinkFactory $factCatProdLink */
/** @var MagentoCatalogApiCategoryLinkRepositoryInterface $repoCatLink */
$link = $factCatProdLink->create();
$link->setCategoryId($catMageId);
$link->setSku($prodSku);
$repoCatLink->save($link);
B'kollox
Il-kitba tal-kodiċi biex iżżid prodott b'mod programmatiku ma' Magento 2 hija pjuttost faċli. Jien għaqqadt dak kollu ddikjarat hawn fuq f'modulu demo "fl32:import:prod
, li timporta l-prodotti deskritti fil-fajl JSON "
[
{
"sku": "...",
"name": "...",
"desc": "...",
"desc_short": "...",
"price": ...,
"qty": ...,
"categories": ["..."],
"image_path": "..."
}
]
Stampi għall-importazzjoni huma fil-katalgu ./etc/data/img
.
Il-ħin biex timporta 10 prodotti bl-użu ta 'dan il-metodu huwa ta' madwar 10 sekondi fuq il-laptop tiegħi. Jekk niżviluppaw aktar din l-idea, huwa faċli li naslu għall-konklużjoni li madwar 3600 prodott jistgħu jiġu importati fis-siegħa, u tista 'tieħu madwar 100 siegħa biex timporta 30K prodotti. Is-sostituzzjoni ta 'laptop b'server jippermettilek li twitti xi ftit is-sitwazzjoni. Forsi anke diversi drabi. Iżda mhux b'ordnijiet ta 'kobor. Forsi din il-ħeffa u l-ħeffa hija sa ċertu punt waħda mir-raġunijiet għall-emerġenza tal-proġett
Soluzzjoni radikali biex tiżdied il-veloċità tal-importazzjoni tista 'tkun dħul dirett fid-database, iżda f'dan il-każ il-"goodies" kollha dwar l-estensibilità ta' Magento jintilfu - inti jkollok tagħmel dak kollu "avvanzat" lilek innifsek. Madankollu, huwa worth it. Jekk taħdem, ser nikkunsidra l-approċċ b'kitba diretta għad-database fl-artiklu li jmiss.
Sors: www.habr.com