Magento 2: Ana shigo da kayayyaki daga Tushen Waje

Magento shine mafitacin kasuwancin e-commerce, i.e. ya fi nufin siyar da kayayyaki fiye da wurin ajiyar kaya, kayan aiki ko lissafin kuɗi tare da tallace-tallace. Sauran aikace-aikacen (misali, tsarin ERP) sun fi dacewa da aikace-aikacen rakiyar. Saboda haka, sau da yawa a cikin al'adar yin amfani da Magento aikin haɗe da kantin sayar da tare da wadannan tsarin (misali, 1C).

Gabaɗaya, ana iya rage haɗin kai zuwa kwafin bayanai ta:

  • catalog (samfuran, nau'ikan);
  • bayanan ƙididdiga (ma'auni na samfur a cikin ɗakunan ajiya da farashin);
  • abokan ciniki;
  • umarni;

Magento yana ba da nau'ikan abubuwa daban-daban don sarrafa bayanai a cikin bayanan - wuraren ajiya. Saboda ƙayyadaddun ƙayyadaddun Magento, ƙara bayanai a cikin bayanan ta hanyar ma'ajiyar bayanai yana da sauƙin yin lamba, amma yana da, bari mu ce, jinkirin. A cikin wannan ɗaba'ar, na yi la'akari da mahimman matakan ƙara samfuri zuwa Magento 2 ta hanyar "classic" - ta amfani da azuzuwan repo.

Abokan ciniki da oda yawanci ana maimaita su a cikin wata hanya - daga Magento zuwa tsarin ERP na waje. Saboda haka, ya fi sauƙi tare da su, a gefen Magento kawai kuna buƙatar zaɓar bayanan da suka dace, sannan "harsashi ya tashi daga wajen mu".

Ka'idodin yin rikodin bayanai a cikin ma'ajin bayanai

A halin yanzu, ƙirƙirar abubuwan da aka adana a cikin ma'ajin bayanai ta hanyar shirye-shirye a cikin Magento ana yin su ta hanyar factory:

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

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

kuma ana yin rubuce-rubuce zuwa ga ma’adanar bayanai ta hanyar mangaza:

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

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

Za a iya amfani da tsarin "Factory" da "Repository" don duk manyan ƙira a cikin yankin Magento 2.

Bayanan Samfur na asali

Ina kallon tsarin bayanai wanda yayi daidai da sigar Magento 2.3. Mafi mahimman bayanai game da samfurin yana cikin tebur catalog_product_entity (rubutun samfur):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

An iyakance ni ga nau'in samfuri guda ɗaya (type_id='simple'), saitin halaye na asali (attribute_set_id=4) da watsi da sifofi has_options и required_options. Tun da halayen entity_id, created_at и updated_at ana samar da su ta atomatik, to, a zahiri, don ƙara sabon samfur, kawai muna buƙatar saitawa sku. Ina yin wannan:

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

kuma ina samun banda:

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

Ina ƙara sunan samfurin zuwa buƙatun kuma in sami saƙo cewa sifa ta ɓace Price. Bayan ƙara farashin, ana ƙara samfurin zuwa bayanan bayanai:

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

Ana adana sunan samfurin a cikin tebur sifa ta samfurin (catalog_product_entity_varchar), farashin - a cikin tebur catalog_product_entity_decimal. Kafin ƙara samfur, yana da kyau a nuna a sarari cewa muna amfani da gaban kantin sayar da kayayyaki don shigo da bayanai:

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

Ƙarin Halaye

Sarrafa ƙarin halayen samfur ta amfani da Magento abin farin ciki ne. Samfurin bayanan EAV don manyan ƙungiyoyi (duba tebur eav_entity_type) yana ɗaya daga cikin mahimman abubuwan wannan dandali. Muna kawai ƙara halayen da suka dace ga ƙirar samfurin:

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

kuma lokacin adana samfurin ta hanyar repo abu:

$repoProd->save($prod);

Hakanan za a adana ƙarin sifofi a cikin tebur ɗin bayanai masu dacewa.

Bayanan kaya

A cikin sauƙi mai sauƙi - adadin samfurin a hannun jari. A cikin Magento 2.3, sifofi a cikin ma'ajin bayanai waɗanda ke bayyana tsarin adana bayanan ƙididdiga sune muhimmanci daban-daban daga abin da ya faru a baya. Duk da haka, ƙara yawan samfurin a hannun jari ta hanyar samfurin samfur bai fi wahala ba fiye da ƙara wasu halaye:

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

Mai jarida

A matsayinka na mai mulki, goyon bayan kafofin watsa labaru don samfurin ga abokin ciniki a cikin kantin sayar da (e-ciniki) ya bambanta da goyon bayan kafofin watsa labaru don samfurin iri ɗaya don ma'aikaci a cikin tsarin lissafin ciki (ERP). A cikin akwati na farko, yana da kyau a nuna samfurin fuska da fuska; a cikin na biyu, ya isa ya ba da cikakken ra'ayi game da samfurin. Koyaya, canja wurin aƙalla hoton farko na samfur ya zama ruwan dare gama gari. case lokacin shigo da bayanai.

Lokacin ƙara hoto ta hanyar gudanarwa, an fara ajiye hoton a cikin kundin adireshi na wucin gadi (./pub/media/tmp/catalog/product) kuma kawai lokacin da aka matsar da samfurin zuwa kundin adireshi (./pub/media/catalog/product). Hakanan, idan aka ƙara ta hanyar gudanarwar gudanarwa, ana yiwa hoton alama 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);

Don wasu dalilai, ana haɗa kafofin watsa labarai ne kawai bayan an fara adana samfurin da sake dawo da shi daga ma'ajiyar. Kuma kuna buƙatar ƙayyade sifa label lokacin daɗa shigarwa zuwa gidan yanar gizon samfurin (in ba haka ba muna samun keɓantacce Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Categories

Sau da yawa, tsarin rukuni na kantin sayar da kayayyaki da aikace-aikacen baya ko sanya samfuran a cikinsu na iya bambanta sosai. Dabarun ƙaura bayanai game da nau'ikan da samfuran da ke cikinsu sun dogara da abubuwa da yawa. A cikin wannan misali na tsaya ga mai zuwa:

  • Ana kwatanta nau'ikan baya da kuma kantin sayar da kayayyaki da suna;
  • idan an shigo da wani nau'i wanda ba a cikin kantin sayar da shi ba, to an ƙirƙira shi a ƙarƙashin nau'in tushen (Default Category) kuma ana ɗaukar ƙarin matsayi a cikin kasidar kantin sayar da kayayyaki da hannu;
  • an sanya samfurin zuwa rukuni kawai lokacin da aka ƙirƙira shi a cikin kantin sayar da (shigo da farko);

Bayanan asali game da nau'in yana cikin tebur catalog_category_entity (Kataloji na Categories). Ƙirƙirar rukuni a cikin Magento:

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

Haɗin samfur zuwa wani nau'i ana aiwatar da shi ta amfani da ID na nau'in da samfurin SKU:

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

Jimlar

Rubutun lambar don ƙara samfur da tsari zuwa Magento 2 abu ne mai sauƙi. Na haɗa duk abin da aka faɗa a sama a cikin tsarin demo "flancer32/mage2_ext_demo_import". Akwai umarnin console guda ɗaya kawai a cikin tsarin fl32:import:prod, wanda ke shigo da samfuran da aka kwatanta a cikin fayil ɗin JSON"./etc/data/products.json":

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

Hotunan shigo da kaya suna cikin kasida ./etc/data/img.

Lokacin shigo da kayayyaki 10 ta amfani da wannan hanyar shine kusan daƙiƙa 10 akan kwamfutar tafi-da-gidanka ta. Idan muka ci gaba da inganta wannan ra'ayi, yana da sauƙi a yanke cewa ana iya shigo da kayayyaki kusan 3600 a cikin sa'a guda, kuma ana iya ɗaukar kimanin sa'o'i 100 don shigo da kayayyaki 30K. Maye gurbin kwamfutar tafi-da-gidanka tare da uwar garken yana ba ku damar daidaita yanayin da ɗan. Wataƙila ma sau da yawa. Amma ba bisa umarnin girma ba. Watakila wannan saurin da tafiyar hawainiya ya kai ga daya daga cikin dalilan bullowar aikin magento/async-import.

Magani mai tsattsauran ra'ayi don haɓaka saurin shigo da kaya na iya zama shiga kai tsaye zuwa cikin bayanan, amma a wannan yanayin duk abubuwan "kyau" game da haɓakar Magento sun ɓace - dole ne ku yi komai "ci gaba" da kanku. Duk da haka, yana da daraja. Idan ya yi aiki, zan yi la'akari da tsarin tare da rubutawa kai tsaye zuwa bayanan bayanai a cikin labarin na gaba.

source: www.habr.com

Add a comment