Magento 2: Ntshuam cov khoom los ntawm cov chaw sab nraud

Magento yog ib qho kev lag luam e-lag luam, i.e. yog tsom rau kev muag khoom ntau dua li ntawm kev muag khoom, logistics lossis nyiaj txiag suav nrog kev muag khoom. Lwm daim ntawv thov (piv txwv li, ERP systems) yog qhov zoo dua rau cov ntawv thov nrog. Yog li ntawd, feem ntau nyob rau hauv kev xyaum siv Magento txoj hauj lwm ntawm kev koom ua ke lub khw nrog rau lwm cov tshuab (piv txwv li, 1C) tshwm sim.

Los ntawm thiab loj, kev koom ua ke tuaj yeem txo qis rau cov ntaub ntawv luam tawm los ntawm:

  • catalog (cov khoom, pawg);
  • cov ntaub ntawv cov khoom lag luam (cov khoom sib npaug hauv cov tsev khaws khoom thiab cov nqi);
  • cov neeg siv khoom;
  • xaj;

Magento muab cov chav kawm cais ntawm cov khoom siv rau kev tswj cov ntaub ntawv hauv database - chaw khaws cia. Vim yog qhov tshwj xeeb ntawm Magento, ntxiv cov ntaub ntawv rau hauv cov ntaub ntawv los ntawm cov chaw khaws cia yog ib qho yooj yim rau code, tab sis nws yog, cia peb hais, qeeb. Hauv kev tshaj tawm no, kuv xav txog cov theem tseem ceeb ntawm kev ua haujlwm ntxiv cov khoom lag luam rau Magento 2 hauv txoj kev "classic" - siv cov chav kawm repo.

Cov neeg siv khoom thiab kev txiav txim feem ntau yog rov ua dua lwm txoj hauv kev - los ntawm Magento mus rau sab nraud ERP systems. Yog li ntawd, nws yooj yim dua nrog lawv, ntawm Magento sab koj tsuas yog xav tau xaiv cov ntaub ntawv tsim nyog, thiab tom qab ntawd "cov mos txwv ya tawm ntawm peb sab".

Cov ntsiab cai ntawm kev sau cov ntaub ntawv rau hauv ib lub database

Tam sim no, tsim cov khoom khaws cia hauv database programmatically hauv Magento yog ua tiav los ntawm Hoobkas:

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

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

thiab sau ntawv mus rau lub database yog ua tiav los ntawm Repository:

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

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

Txoj kev "Factory" thiab "Repository" tuaj yeem siv rau txhua tus qauv loj hauv Magento 2 sau.

Cov ntaub ntawv tseem ceeb ntawm cov khoom

Kuv tab tom saib cov qauv ntaub ntawv uas phim Magento 2.3 version. Cov ntaub ntawv tseem ceeb tshaj plaws txog cov khoom yog nyob rau hauv lub rooj catalog_product_entity (cov npe khoom):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Kuv txwv rau ib hom khoom (type_id='simple'), ib txheej ntawm default attributes (attribute_set_id=4) thiab tsis quav ntsej cov cwj pwm has_options ΠΈ required_options. Txij li cov cwj pwm entity_id, created_at ΠΈ updated_at yog generated txiav, ces, qhov tseeb, ntxiv ib yam khoom tshiab, peb tsuas yog yuav tsum tau teem sku. Kuv ua qhov no:

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

thiab kuv tau txais ib qho kev zam:

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

Kuv ntxiv cov khoom npe rau qhov kev thov thiab tau txais cov lus hais tias tus cwj pwm ploj lawm Price. Tom qab ntxiv tus nqi, cov khoom tau ntxiv rau hauv database:

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

Cov khoom npe yog khaws cia rau hauv cov khoom varchar attribute rooj (catalog_product_entity_varchar), tus nqi - hauv lub rooj catalog_product_entity_decimal. Ua ntej yuav ntxiv ib yam khoom, nws yog advisable kom qhia meej tias peb tab tom siv cov thawj coj storefront rau import cov ntaub ntawv:

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

Yam ntxwv ntxiv

Kev ua cov khoom lag luam ntxiv uas siv Magento yog qhov zoo siab. EAV data model for main entities (saib table eav_entity_type) yog ib qho tseem ceeb ntawm lub platform no. Peb tsuas ntxiv cov yam ntxwv tsim nyog rau cov qauv khoom:

$prodEntity->setData('description', $desc);
$prodEntity->setData('short_description', $desc_short);
// ΠΈΠ»ΠΈ
$prodEntity->setDescription($desc);
$prodEntity->setShortDescription($desc_short);

thiab thaum txuag tus qauv ntawm cov khoom repo:

$repoProd->save($prod);

Ntxiv cov cwj pwm tseem yuav muab khaws cia rau hauv cov rooj sib tham database.

Cov ntaub ntawv khaws tseg

Hauv cov ntsiab lus yooj yim - tus nqi ntawm cov khoom hauv Tshuag. Hauv Magento 2.3, cov qauv hauv cov ntaub ntawv uas piav qhia txog hom kev khaws cia cov ntaub ntawv yog txawv heev los ntawm qhov tshwm sim ua ntej. Txawm li cas los xij, ntxiv qhov kom muaj nuj nqis ntawm cov khoom hauv Tshuag ntawm cov qauv khoom tsis yog qhov nyuaj dua li ntxiv lwm cov cwj pwm:

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

Xov Xwm

Raws li txoj cai, kev txhawb nqa xov xwm rau cov khoom lag luam rau cov neeg siv khoom hauv lub khw (e-lag luam) txawv ntawm kev txhawb nqa kev tshaj tawm rau tib yam khoom rau ib tus neeg ua haujlwm hauv kev lag luam hauv kev lag luam (ERP). Hauv thawj kis, nws raug nquahu kom qhia cov khoom muag ntawm lub ntsej muag; hauv qhov thib ob, nws yog qhov txaus los muab lub tswv yim dav dav ntawm cov khoom. Txawm li cas los xij, kev hloov pauv yam tsawg kawg yog thawj daim duab ntawm cov khoom lag luam yog qhov ntau heev. case thaum import cov ntaub ntawv.

Thaum ntxiv ib daim duab los ntawm tus thawj tswj vaj huam sib luag, cov duab yog thawj zaug tau txais kev cawmdim nyob rau hauv ib ntus directory (./pub/media/tmp/catalog/product) thiab tsuas yog thaum txuag cov khoom raug txav mus rau hauv cov ntaub ntawv xov xwm (./pub/media/catalog/product). Tsis tas li ntawd, thaum ntxiv los ntawm admin vaj huam sib luag, cov duab tau tagged 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);

Rau qee qhov laj thawj, cov xov xwm txuas tsuas yog tom qab thawj zaug khaws cov khoom thiab rov qab los ntawm qhov chaw cia khoom dua. Thiab koj yuav tsum qhia tus cwj pwm label thaum ntxiv ib qho kev nkag mus rau cov khoom lag luam media gallery (tsis li ntawd peb tau txais kev zam Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Pawg

Feem ntau, pawg qauv ntawm lub khw thiab daim ntawv thov backend los yog qhov chaw ntawm cov khoom nyob rau hauv lawv yuav txawv heev. Cov tswv yim rau kev tsiv teb tsaws cov ntaub ntawv hais txog pawg thiab cov khoom hauv lawv nyob ntawm ntau yam. Hauv qhov piv txwv no kuv ua raws li hauv qab no:

  • backend thiab khw muag khoom yog muab piv los ntawm lub npe;
  • Yog hais tias ib qeb yog imported uas tsis nyob rau hauv lub khw, ces nws yog tsim nyob rau hauv lub hauv paus qeb (Default Category) thiab nws qhov chaw ntxiv nyob rau hauv lub khw catalog yog suav tias yog manually;
  • ib yam khoom raug muab rau ib pawg tsuas yog thaum nws tsim nyob rau hauv lub khw (thawj ntshuam);

Cov ntaub ntawv tseem ceeb ntawm qeb yog nyob rau hauv lub rooj catalog_category_entity (catalog ntawm pawg). Tsim ib qeb hauv Magento:

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

Txuas ib yam khoom rau ib qeb yog ua los ntawm qeb ID thiab cov khoom SKU:

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

Tag nrho

Kev sau cov lej ntxiv cov khoom lag luam programmatically rau Magento 2 yog qhov yooj yim heev. Kuv tau muab txhua yam uas tau hais los saum toj no rau hauv lub demo module "flancer32/mage2_ext_demo_import". Muaj tsuas yog ib qho console hais kom ua nyob rau hauv lub module fl32:import:prod, uas imports cov khoom tau piav qhia hauv JSON cov ntaub ntawv "./etc/data/products.json":

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

Cov duab rau import yog nyob rau hauv catalog ./etc/data/img.

Lub sij hawm import 10 khoom siv txoj kev no yog li 10 vib nas this ntawm kuv lub laptop. Yog tias peb tsim lub tswv yim no ntxiv, nws yog ib qho yooj yim los mus rau qhov xaus tias txog 3600 cov khoom tuaj yeem tuaj yeem tuaj yeem tuaj yeem siv sijhawm li 100 teev los import 30K khoom. Hloov lub laptop nrog lub server tso cai rau koj kom ua tiav qhov xwm txheej me ntsis. Tej zaum txawm ob peb zaug. Tab sis tsis yog los ntawm kev txiav txim loj. Tej zaum qhov kev nrawm thiab qeeb no yog rau qee qhov ntawm ib qho laj thawj rau qhov tshwm sim ntawm qhov project magento/async-ntshuam.

Ib qho kev daws teeb meem los ua kom nrawm nrawm tuaj yeem nkag mus rau hauv cov ntaub ntawv ncaj qha, tab sis qhov no tag nrho cov "goodies" hais txog kev nthuav dav ntawm Magento ploj - koj yuav tau ua txhua yam "ua ntej" koj tus kheej. Txawm li cas los xij, nws tsim nyog. Yog tias nws ua haujlwm, kuv yuav xav txog txoj hauv kev nrog kev sau ncaj qha rau hauv cov ntaub ntawv hauv kab ntawv txuas ntxiv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib