Magento 2: A’ toirt a-steach thoraidhean bho stòran taobh a-muigh

Tha Magento na fhuasgladh e-malairt, i.e. ag amas nas motha air a bhith a’ reic thoraidhean na air bathar-thaighean, loidsistigs no cunntasachd ionmhais an cois reic. Tha tagraidhean eile (mar eisimpleir, siostaman ERP) nas freagarraiche airson tagraidhean nan cois. Mar sin, gu math tric ann an cleachdadh a bhith a 'cleachdadh Magento an obair a bhith ag amalachadh stòr leis na siostaman eile (mar eisimpleir, 1C).

San fharsaingeachd, faodar amalachadh a lughdachadh gu ath-riochdachadh dàta le bhith:

  • catalog (bathar, roinnean);
  • dàta clàr-seilbhe (cothromachadh toraidh ann an taighean-bathair agus prìsean);
  • luchd-dèiligidh;
  • òrduighean;

Tha Magento a’ tabhann clas air leth de stuthan airson a bhith a’ làimhseachadh dàta san stòr-dàta - tasgaidh. Air sgàth mion-fhiosrachadh Magento, tha e furasta dàta a chuir ris an stòr-dàta tro stòran-tasgaidh a chòdachadh, ach tha e, canaidh sinn, slaodach. Anns an fhoillseachadh seo, bidh mi a’ beachdachadh air na prìomh ìrean de bhith a’ cur toradh ri Magento 2 gu prògramach san dòigh “clasaigeach” - a’ cleachdadh chlasaichean repo.

Mar as trice bidh luchd-ceannach agus òrdughan air an ath-aithris an taobh eile - bho Magento gu siostaman ERP taobh a-muigh. Mar sin, tha e nas sìmplidh leotha, air taobh Magento feumaidh tu dìreach an dàta iomchaidh a thaghadh, agus an uairsin “chaidh peilearan a mach o'n taobh".

Prionnsabalan clàradh dàta ann an stòr-dàta

Aig an àm seo, thathas a’ cruthachadh stuthan a chaidh a shàbhaladh san stòr-dàta gu prògramach ann am Magento factaraidh:

function __construct (MagentoCmsModelBlockFactory $blockFactory) {
    $this->blockFactory = $blockFactory;
}

/** @var MagentoCmsModelBlock $block */
$block = $this->blockFactory->create();

agus thathar a’ sgrìobhadh chun stòr-dàta troimhe Stòrlann:

function __construct (MagentoCmsApiBlockRepositoryInterface $blockRepo) {
    $this->blockRepo = $blockRepo;
}

$this->blockRepo->save($block);

Faodar an dòigh-obrach "Factory" agus "Repository" a chleachdadh airson a h-uile prìomh mhodail ann an raon Magento 2.

Fiosrachadh toraidh bunaiteach

Tha mi a’ coimhead air structar dàta a tha a rèir dreach Magento 2.3. Tha am fiosrachadh as bunaitiche mun toradh anns a’ chlàr catalog_product_entity (clàr toraidh):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Tha mi cuingealaichte ri aon seòrsa toraidh (type_id='simple'), seata de fheartan bunaiteach (attribute_set_id=4) agus seachain buadhan has_options и required_options. Air sgàth na feartan entity_id, created_at и updated_at air an gineadh gu fèin-ghluasadach, an uairsin, gu dearbh, gus toradh ùr a chuir ris, feumaidh sinn dìreach suidheachadh sku. Bidh mi a' dèanamh seo:

/** @var MagentoCatalogApiDataProductInterfaceFactory $factProd */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
/** @var MagentoCatalogApiDataProductInterface $prod */
$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$repoProd->save($prod);

agus gheibh mi eisgeachd:

The "Product Name" attribute value is empty. Set the attribute and try again.

Cuiridh mi ainm an toraidh ris an iarrtas agus gheibh mi teachdaireachd gu bheil am feart a dhìth Price. Às deidh a ’phrìs a chuir ris, thèid an toradh a chuir ris an stòr-dàta:

$prod = $factProd->create();
$prod->setAttributeSetId(4);
$prod->setTypeId('simple');
$prod->setSku($sku);
$prod->setName($name);
$prod->setPrice($price);
$repoProd->save($prod);

Tha ainm an toraidh air a stòradh ann an clàr buadhan varchar toraidh (catalog_product_entity_varchar), prìs - anns a 'chlàr catalog_product_entity_decimal. Mus cuir thu toradh ris, tha e ciallach innse gu soilleir gu bheil sinn a’ cleachdadh an aghaidh stòr rianachd gus dàta a thoirt a-steach:

/** @var MagentoStoreModelStoreManagerInterface $manStore */
$manStore->setCurrentStore(0);

Feartan a bharrachd

Tha e na thoileachas a bhith a’ giullachd buadhan toraidh a bharrachd a’ cleachdadh Magento. Modail dàta EAV airson prìomh bhuidhnean (faic an clàr eav_entity_type) aon de na prìomh fheartan den àrd-ùrlar seo. Bidh sinn dìreach a’ cur na buadhan iomchaidh ris a’ mhodail toraidh:

$prodEntity->setData('description', $desc);
$prodEntity->setData('short_description', $desc_short);
// или
$prodEntity->setDescription($desc);
$prodEntity->setShortDescription($desc_short);

agus nuair a shàbhalas tu am modail tron ​​rud repo:

$repoProd->save($prod);

thèid buadhan a bharrachd a stòradh anns na clàran stòr-dàta co-fhreagarrach.

Dàta clàr-stuthan

Ann an teirmean sìmplidh - an àireamh de thoraidhean ann an stoc. Ann am Magento 2.3, tha structaran anns an stòr-dàta a tha a’ toirt cunntas air a’ chruth airson dàta tasgaidh a stòradh gu math eadar-dhealaichte bho na thachair roimhe. Ach, chan eil e mòran nas duilghe meud toraidh ann an stoc a chuir ris a’ mhodail toraidh na buadhan eile a chur ris:

/** @var MagentoCatalogModelProduct $prodEntity */
/** @var MagentoCatalogApiProductRepositoryInterface $repoProd */
$inventory = [
    'is_in_stock' => true,
    'qty' => 1234
];
$prodEntity->setData('quantity_and_stock_status', $inventory);
$repoProd->save($prodEntity);

Meadhanan

Mar riaghailt, tha taic mheadhanan airson toradh airson neach-dèiligidh ann an stòr (e-malairt) eadar-dhealaichte bho thaic mheadhanan airson an aon toradh airson neach-obrach ann an siostam cunntasachd a-staigh (ERP). Anns a 'chiad chùis, tha e ciallach an toradh a shealltainn aghaidh ri aghaidh; anns an dàrna fear, tha e gu leòr airson beachd coitcheann a thoirt air an toradh. Ach, tha gluasad co-dhiù prìomh ìomhaigh toraidh gu math cumanta. case nuair a thathar a’ toirt a-steach dàta.

Nuair a chuireas tu ìomhaigh tron ​​​​phannal rianachd, thèid an ìomhaigh a shàbhaladh an toiseach ann an eòlaire sealach (./pub/media/tmp/catalog/product) agus dìreach nuair a thèid an toradh a shàbhaladh thèid a ghluasad gu eòlaire nam meadhanan (./pub/media/catalog/product). Cuideachd, nuair a thèid a chur ris tron ​​​​phannal rianachd, tha an ìomhaigh air a tagadh 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);

Air adhbhar air choireigin, chan eil na meadhanan ceangailte ach às deidh an toradh a shàbhaladh an toiseach agus a thoirt air ais bhon stòr a-rithist. Agus feumaidh tu am feart a shònrachadh label nuair a chuireas sinn inntrigeadh ri gailearaidh nam meadhanan toraidh (air neo gheibh sinn eisgeachd Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Roinnean

Gu tric, faodaidh structar roinn-seòrsa an stòr agus an tagradh backend no suidheachadh thoraidhean annta a bhith gu math eadar-dhealaichte. Tha ro-innleachdan airson imrich dàta mu roinnean agus toraidhean taobh a-staigh iad an urra ri mòran fhactaran. San eisimpleir seo tha mi a’ cumail ris na leanas:

  • tha roinnean cùl-taice agus stòr air an coimeas a rèir ainm;
  • ma thèid roinn a thoirt a-steach nach eil anns a’ bhùth, thèid a chruthachadh fon roinn freumh (Default Category) agus thathar a’ gabhail ris le làimh a shuidheachadh eile ann an catalog a’ bhùth;
  • tha toradh air a shònrachadh do roinn a-mhàin nuair a thèid a chruthachadh anns a ’bhùth (a’ chiad in-mhalairt);

Tha fiosrachadh bunaiteach mun roinn sa chlàr catalog_category_entity (catalog de roinnean). A’ cruthachadh roinn ann am Magento:

/** @var MagentoCatalogApiDataCategoryInterfaceFactory $factCat */
/** @var MagentoCatalogApiCategoryRepositoryInterface $repoCat */
$cat = $factCat->create();
$cat->setName($name);
$cat->setIsActive(true);
$repoCat->save($cat);

Bithear a’ ceangal toradh ri roinn a’ cleachdadh ID na roinne agus an toradh SKU:

/** @var MagentoCatalogModelCategoryProductLinkFactory $factCatProdLink */
/** @var MagentoCatalogApiCategoryLinkRepositoryInterface $repoCatLink */
$link = $factCatProdLink->create();
$link->setCategoryId($catMageId);
$link->setSku($prodSku);
$repoCatLink->save($link);

Iomlan

Tha e gu math furasta còd a sgrìobhadh gus toradh a chuir ri Magento 2 gu prògramach. Tha mi air a h-uile dad gu h-àrd a thoirt còmhla ann am modal demo “flancer32/mage2_ext_demo_import". Chan eil ach aon àithne tòcan anns a’ mhodal fl32:import:prod, a bheir a-steach am bathar a tha air a mhìneachadh san fhaidhle JSON"./etc/data/products.json":

[
  {
    "sku": "...",
    "name": "...",
    "desc": "...",
    "desc_short": "...",
    "price": ...,
    "qty": ...,
    "categories": ["..."],
    "image_path": "..."
  }
]

Tha dealbhan airson in-mhalairt anns a’ chatalog ./etc/data/img.

Tha an ùine airson 10 toraidhean a thoirt a-steach a’ cleachdadh an dòigh seo timcheall air 10 diogan air an laptop agam. Ma leasaicheas sinn am beachd seo nas fhaide, tha e furasta a thighinn chun cho-dhùnadh gum faodar timcheall air 3600 toradh a thoirt a-steach san uair, agus gun toir e timcheall air 100 uair airson toraidhean 30K a thoirt a-steach. Le bhith a’ cur frithealaiche an àite laptop leigidh sin leat an suidheachadh a dhèanamh rèidh beagan. Is dòcha eadhon grunn thursan. Ach chan ann le òrdughan meudachd. Is dòcha gur e an astar agus an slaodachd seo gu ìre aon de na h-adhbharan airson nochdadh a’ phròiseict magento/async-import.

Dh ’fhaodadh fuasgladh radaigeach airson astar in-mhalairt àrdachadh a bhith a’ faighinn a-steach don stòr-dàta gu dìreach, ach sa chùis seo tha a h-uile “goodies” a thaobh leudachd Magento air chall - feumaidh tu a h-uile dad a dhèanamh “adhartach” thu fhèin. Ge-tà, is fhiach e. Ma dh’ obraicheas e a-mach, beachdaichidh mi air an dòigh-obrach le sgrìobhadh dìreach chun stòr-dàta san ath artaigil.

Source: www.habr.com

Cuir beachd ann