Magento 2: Ka lawe ʻana i nā huahana mai nā kumuwaiwai waho

ʻO Magento kahi hopena e-commerce, ʻo ia hoʻi. ʻoi aku ka manaʻo o ke kūʻai aku ʻana i nā huahana ma mua o ka hale kūʻai, logistic a i ʻole ka helu kālā e hele pū ana me nā kūʻai. ʻOi aku ka maikaʻi o nā noi ʻē aʻe (no ka laʻana, nā ʻōnaehana ERP) no nā noi e pili ana. No laila, pinepine i ka hoʻomaʻamaʻa ʻana i ka hoʻohana ʻana iā Magento ka hana o ka hoʻohui ʻana i kahi hale kūʻai me kēia mau ʻōnaehana ʻē aʻe (no ka laʻana, 1C).

Ma ke ʻano nui, hiki ke hoʻemi ʻia ka hoʻohui ʻana i ka hoʻopili hou ʻana i ka ʻikepili e:

  • papa inoa (nā huahana, nā ʻāpana);
  • ʻikepili waihona (nā kaulike huahana ma nā hale kūʻai a me nā kumukūʻai);
  • nā mea kūʻai aku;
  • kauoha;

Hāʻawi ʻo Magento i kahi papa ʻokoʻa o nā mea no ka hoʻopunipuni ʻana i ka ʻikepili i ka waihona - hale waihona. Ma muli o nā kikoʻī o Magento, ʻo ka hoʻohui ʻana i ka ʻikepili i ka waihona ma o nā repositories he maʻalahi ke code, akā, e ʻōlelo mākou, lohi. Ma kēia hoʻolaha, manaʻo wau i nā pae nui o ka hoʻohui ʻana i kahi huahana i Magento 2 ma ke ʻano "maʻamau" - me ka hoʻohana ʻana i nā papa repo.

Hoʻopili pinepine ʻia nā mea kūʻai aku a me nā kauoha ma ke ala ʻē aʻe - mai Magento a i nā ʻōnaehana ERP waho. No laila, ʻoi aku ka maʻalahi me lākou, ma ka ʻaoʻao Magento pono ʻoe e koho i ka ʻikepili kūpono, a laila "lele mai na poka mai ko makou aoao aku".

Nā loina o ka hoʻopaʻa ʻana i ka ʻikepili i loko o kahi waihona

I kēia manawa, hana ʻia ka hana ʻana i nā mea i mālama ʻia ma ka ʻikepili programmatically ma Magento hola:

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

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

a kākau ʻia i ka waihona ma o Ka Hale Paʻi:

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

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

Hiki ke hoʻohana ʻia ke ala "Factory" a me "Repository" no nā hiʻohiʻona nui a pau i ka domain Magento 2.

ʻIke Huahana Kumu

Ke nānā nei au i kahi hoʻolālā ʻikepili e pili ana i ka mana Magento 2.3. Aia ka ʻike maʻamau e pili ana i ka huahana ma ka papaʻaina catalog_product_entity (kāinoa huahana):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Ua kaupalena au i hoʻokahi ʻano huahana (type_id='simple'), he pūʻulu o nā ʻano paʻamau (attribute_set_id=4) a haʻalele i nā ʻano has_options и required_options. Mai nā hiʻohiʻona entity_id, created_at и updated_at hana ʻia, a laila, ʻoiaʻiʻo, e hoʻohui i kahi huahana hou, pono mākou e hoʻonohonoho sku. Hana wau i kēia:

/** @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 loaʻa iaʻu kahi ʻokoʻa:

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

Hoʻohui au i ka inoa huahana i ka noi a loaʻa i kahi memo ua nalowale ke ʻano Price. Ma hope o ka hoʻohui ʻana i ke kumukūʻai, hoʻohui ʻia ka huahana i ka waihona:

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

Hoʻopaʻa ʻia ka inoa huahana ma ka pākaukau ʻano huahana varchar (catalog_product_entity_varchar), kumu kūʻai - ma ka papaʻaina catalog_product_entity_decimal. Ma mua o ka hoʻohui ʻana i kahi huahana, pono e hōʻike maopopo ke hoʻohana nei mākou i ka hale kūʻai hoʻokele e hoʻokomo i ka ʻikepili:

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

Nā mea hou aku

He leʻaleʻa ka hana ʻana i nā ʻano huahana hou me ka hoʻohana ʻana iā Magento. Ke kumu hoʻohālike EAV no nā mea nui (e nānā i ka papa eav_entity_type) ʻo ia kekahi o nā hiʻohiʻona nui o kēia paepae. Hoʻohui wale mākou i nā ʻano kūpono i ke ʻano huahana:

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

a i ka mālama ʻana i ke kumu hoʻohālike ma o ka mea repo:

$repoProd->save($prod);

e mālama ʻia nā ʻano ʻē aʻe i loko o nā papa ʻikepili pili.

ʻikepili waihona

Ma nā'ōlelo maʻalahi - ka nui o ka huahana i ka waihona. Ma Magento 2.3, nā hale i loko o ka waihona e wehewehe ana i ke ʻano no ka mālama ʻana i ka ʻikepili waihona ʻokoʻa loa mai ka mea i hana mua ia. Eia nō naʻe, ʻaʻole ʻoi aku ka paʻakikī o ka hoʻohui ʻana i ka nui o kahi huahana i ka waihona ma o ke kumu hoʻohālike huahana ma mua o ka hoʻohui ʻana i nā ʻano ʻē aʻe:

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

Lāpaho

E like me ke kānāwai, ʻokoʻa ke kākoʻo media no kahi huahana no ka mea kūʻai aku ma kahi hale kūʻai (e-commerce) mai ke kākoʻo media no ka huahana like no kahi limahana ma kahi ʻōnaehana helu kūloko (ERP). I ka hihia mua, pono e hōʻike i ka huahana he alo a he alo; i ka lua, ua lawa ia e hāʻawi i kahi manaʻo nui o ka huahana. Eia naʻe, maʻa mau ka hoʻoili ʻana i ke kiʻi mua o kahi huahana. case i ka lawe ʻana i ka ʻikepili.

Ke hoʻohui nei i kahi kiʻi ma o ka admin panel, mālama mua ʻia ke kiʻi i loko o kahi papa kuhikuhi manawa (./pub/media/tmp/catalog/product) a ke hoʻoneʻe ʻia ka huahana i ka papa kuhikuhi media (./pub/media/catalog/product). Eia kekahi, ke hoʻohui ʻia ma o ka admin panel, ua kau ʻia ke kiʻi 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);

No kekahi kumu, pili ka media ma hope o ka mālama mua ʻana i ka huahana a kiʻi hou mai ka waihona. A pono ʻoe e kuhikuhi i ke ʻano label i ka hoʻohui ʻana i kahi komo i ka hale kiʻi media huahana (inā ʻaʻole e loaʻa iā mākou kahi ʻokoʻa Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Māhele

ʻO ka manawa pinepine, hiki ke ʻokoʻa ke ʻano o ka hale kūʻai a me ka noi hope a i ʻole ke kau ʻana o nā huahana i loko. ʻO nā hoʻolālā no ka neʻe ʻana i ka ʻikepili e pili ana i nā ʻāpana a me nā huahana i loko o ia mau mea pili i nā kumu he nui. Ma kēia hiʻohiʻona, pili wau i kēia:

  • hoʻohālikelike ʻia nā ʻano o ka backend a me ka hale kūʻai ma ka inoa;
  • inā lawe ʻia kahi ʻāpana ʻaʻole i loko o ka hale kūʻai, a laila hana ʻia ma lalo o ke kumu kumu (Default Category) a ua manaʻo lima ʻia kona hoʻonoho ʻana ma ka waihona hale kūʻai;
  • hāʻawi ʻia kahi huahana i kahi ʻāpana wale nō ke hana ʻia i loko o ka hale kūʻai (hoʻokomo mua ʻia);

Aia ka ʻike kumu e pili ana i ka ʻāpana i ka pākaukau catalog_category_entity (catalog of categories). Ke hana ʻana i kahi ʻano ma Magento:

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

Hoʻopili ʻia kahi huahana i kahi ʻāpana me ka hoʻohana ʻana i ka ID waeʻano a me ka SKU huahana:

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

Hōʻuluʻulu

Maʻalahi loa ke kākau ʻana i ka code e hoʻohui i kahi huahana programmatically iā Magento 2. Ua hoʻohui au i nā mea a pau i ʻōlelo ʻia ma luna nei i kahi module demo "flancer32/mage2_ext_demo_import". Hoʻokahi wale nō kauoha console ma ka module fl32:import:prod, ka mea e lawe mai i nā huahana i wehewehe ʻia ma ka faila JSON "./etc/data/products.json":

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

Aia nā kiʻi no ka lawe ʻia ʻana mai ma ka waihona ./etc/data/img.

ʻO ka manawa e hoʻokomo ai i nā huahana 10 e hoʻohana ana i kēia ʻano ma kahi o 10 kekona ma kaʻu kamepiula. Inā mākou e hoʻomohala hou i kēia manaʻo, hiki ke maʻalahi i ka hopena ma kahi o 3600 mau huahana hiki ke lawe ʻia i kēlā me kēia hola, a hiki ke lawe ma kahi o 100 mau hola e lawe mai i nā huahana 30K. ʻO ka hoʻololi ʻana i kahi kamepiula me kahi kikowaena hiki iā ʻoe ke hoʻomaʻemaʻe i ke kūlana. Malia paha i kekahi mau manawa. ʻAʻole naʻe ma ke kauoha o ka nui. ʻO kēia wikiwiki a me ka lohi paha kekahi o nā kumu o ka puka ʻana o ka papahana magento/async-import.

ʻO kahi hopena radical e hoʻonui i ka wikiwiki o ka lawe ʻana mai hiki ke komo pololei i ka waihona, akā i kēia hihia ua nalowale nā ​​​​"maikaʻi" āpau e pili ana i ka hoʻonui ʻia o Magento - pono ʻoe e hana i nā mea āpau "holomua" iā ʻoe iho. Eia naʻe, pono ia. Inā hana ia, e noʻonoʻo wau i ke ala me ke kākau pololei ʻana i ka waihona ma ka ʻatikala aʻe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka