Magento 2: te kawemai i nga hua mai i nga puna o waho

Ko Magento he otinga e-tauhokohoko, i.e. he nui ake te whainga ki te hoko hua atu i te whare putunga, nga mahi whakahaere, te kaute putea ranei e haere tahi ana me nga hoko. Ko etahi atu tono (hei tauira, nga punaha ERP) he pai ake mo nga tono taapiri. Na reira, i te nuinga o nga wa i roto i te mahi ki te whakamahi i te Magento te mahi ki te whakauru i tetahi toa me enei atu punaha (hei tauira, 1C) ka ara ake.

I te nuinga, ka taea te whakaiti i te whakauru ki te tukurua raraunga ma te:

  • rārangi (hua, kāwai);
  • raraunga rārangi (whakaritenga hua i roto i nga whare putunga me nga utu);
  • kiritaki;
  • ota;

Ka tuku a Magento i tetahi karaehe motuhake o nga taonga mo te raweke i nga raraunga i roto i te papanga raraunga - whare putunga. Na nga mea motuhake o Magento, ko te taapiri i nga raraunga ki te papaaarangi ma roto i nga putunga he ngawari ki te tohu, engari, me kii, he puhoi. I roto i tenei whakaputanga, ka whakaarohia e au nga waahanga matua o te taapiri i tetahi hua ki te Magento 2 ma te "matarohia" - ma te whakamahi i nga karaehe repo.

Ko nga kaihoko me nga ota ka tukuna ki tetahi atu huarahi - mai i Magento ki nga punaha ERP o waho. Na reira, he maamaa ake ki a raatau, i te taha o Magento me kowhiria e koe nga raraunga e tika ana, katahi ka "ka rere nga matā i to matou taha".

Nga maataapono o te tuhi raraunga ki roto i te putunga raraunga

I tenei wa, kua oti te hanga i nga mea kua tiakina i roto i te papaarangi raraunga i roto i te Magento Factory:

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

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

me te tuhi ki te papa raraunga ka mahia ma te Repository:

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

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

Ka taea te whakamahi i te huarahi "Factory" me te "Repository" mo nga tauira nui katoa i te rohe Magento 2.

Nga korero hua taketake

Kei te titiro ahau ki tetahi hanganga raraunga e rite ana ki te putanga Magento 2.3. Ko nga korero tino nui mo te hua kei te ripanga catalog_product_entity (rehita hua):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

He iti noa ahau ki tetahi momo hua (type_id='simple'), he huinga huanga taunoa (attribute_set_id=4) me te wareware ki nga huanga has_options и required_options. Mai i nga huanga entity_id, created_at и updated_at he mea hanga aunoa, na, hei taapiri i tetahi hua hou, me tautuhi noa sku. Ka mahia e ahau tenei:

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

a ka whiwhi au i tetahi tuunga:

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

Ka taapirihia e ahau te ingoa hua ki te tono ka whiwhi karere kei te ngaro te huanga Price. I muri i te taapiri i te utu, ka taapirihia te hua ki te paataka raraunga:

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

Kei te rongoa te ingoa hua ki te ripanga huanga varchar hua (catalog_product_entity_varchar), utu - kei te tepu catalog_product_entity_decimal. I mua i te taapiri i tetahi hua, he mea tika kia tino tohu kei te whakamahi matou i te toa whakahaere hei kawemai i nga raraunga:

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

Huanga Tāpiri

Ko te tukatuka i etahi atu huanga hua ma te whakamahi i te Magento he mea koa. Tauira raraunga EAV mo nga hinonga matua (tirohia te ripanga eav_entity_type) Ko tetahi o nga ahuatanga matua o tenei turanga. Ka taapiri noa matou i nga huanga e tika ana ki te tauira hua:

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

a ka tiakina te tauira ma te ahanoa repo:

$repoProd->save($prod);

ka penapena ano etahi atu huanga ki roto i nga ripanga raraunga e pa ana.

Raraunga Rarangi

I nga kupu ngawari - te nui o nga hua kei roto i nga taonga. I roto i te Magento 2.3, ko nga hanganga kei roto i te papaa raraunga e whakaahua ana i te whakatakotoranga mo te penapena raraunga raarangi tino rerekē mai i nga mea i tupu i mua. Heoi, ko te taapiri i te rahinga o te hua i roto i nga taonga ma te tauira hua ehara i te mea uaua ake i te taapiri i etahi atu huanga:

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

Pāpāho

Hei tikanga, he rereke te tautoko pāpāho mo tetahi hua mo te kaihoko i roto i te toa (e-tauhokohoko) mai i te tautoko pāpāho mo te hua kotahi mo te kaimahi i roto i te punaha kaute o roto (ERP). I roto i te keehi tuatahi, he mea tika kia whakaatuhia te hua ki te kanohi ki te kanohi; i te tuarua, he nui ki te tuku whakaaro whanui mo te hua. Heoi, ko te whakawhiti i te ahua tuatahi o tetahi hua he mea noa. case i te wa e kawemai ana i nga raraunga.

I te wa e taapirihia ana he whakaahua ma te papa whakahaere, ka tiakina tuatahitia te atahanga ki roto i te raarangi rangitahi (./pub/media/tmp/catalog/product) a ka nukuhia te hua ki te whaiaronga pāpāho (./pub/media/catalog/product). Ano, ka taapirihia ma te roopu whakahaere, ka tohua te ahua 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);

Mo etahi take, ka honohia te hunga panui i muri i te tiaki tuatahi i te hua me te whakahoki ano mai i te putunga. A me tohu e koe te huanga label i te taapiri i tetahi urunga ki te taiwhanga pāpāho hua (mehemea ka riro he otahi Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Ngā Kāwai

I te nuinga o nga wa, ko te hanganga waahanga o te toa me te tono tuara me te tuunga o nga hua ki roto ka tino rerekee. Ko nga rautaki mo te heke raraunga mo nga waahanga me nga hua kei roto e whakawhirinaki ana ki nga mea maha. I tenei tauira ka piri ahau ki nga mea e whai ake nei:

  • ka whakatauritehia nga waahanga o muri me nga toa ma te ingoa;
  • Mena ka kawea mai he waahanga kaore i roto i te toa, ka hangaia i raro i te waahanga pakiaka (Default Category) me tana tuunga atu i roto i te putumōhio toa ka mau ki te ringa;
  • ka tautapahia he hua ki tetahi waahanga ka hangaia i roto i te toa (kawe tuatahi);

Ko nga korero taketake mo te waahanga kei te ripanga catalog_category_entity (putumōhio o ngā kāwai). Te hanga i tetahi waahanga ki Magento:

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

Ko te hono i tetahi hua ki tetahi waahanga ka mahia ma te whakamahi i te ID kāwai me te SKU hua:

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

Te tapeke

Ko te tuhi waehere hei taapiri i tetahi hua ki te Magento 2 he tino ngawari. Kua whakakotahihia e ahau nga mea katoa kua whakahuahia i runga ake nei ki roto i te waahanga demo "flancer32/mage2_ext_demo_import". Kotahi anake te tono papatohu kei roto i te kōwae fl32:import:prod, e kawemai ana i nga hua e whakaahuatia ana i te konae JSON "./etc/data/products.json":

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

Ko nga pikitia hei kawemai kei roto i te raarangi ./etc/data/img.

Ko te wa ki te kawemai i nga hua 10 ma te whakamahi i tenei tikanga ko te 10 hēkona i runga i taku pona. Mena ka whakawhanake ake tatou i tenei whakaaro, ka ngawari te whakatau ka taea te kawe mai i nga hua 3600 ia haora, a ka roa pea te 100 haora ki te kawe mai i nga hua 30K. Ko te whakakapi i te pona ki te tūmau ka taea e koe te maeneene i te ahuatanga. He maha pea nga wa. Engari kaore i runga i nga whakahau o te nui. Ko tenei tere me te puhoi pea tetahi o nga take i puta mai ai te kaupapa magento/async-import.

Ko te otinga tino kaha ki te whakapiki ake i te tere o te kawemai ka taea te uru ki roto i te paataka raraunga, engari i tenei keehi ka ngaro katoa nga "mea pai" mo te toronga o Magento - me mahi e koe nga mea katoa "maamaa" koe. Heoi, he mea utu. Mena ka puta, ka whakaarohia e ahau te huarahi me te tuhi tika ki te papaarangi i roto i te tuhinga e whai ake nei.

Source: will.com

Tāpiri i te kōrero