Magento 2: Gbigbe Awọn ọja wọle lati Awọn orisun Ita

Magento jẹ ojuutu iṣowo e-commerce, i.e. ti wa ni ifọkansi diẹ sii lati ta awọn ọja ju ni ile itaja, awọn eekaderi tabi iṣiro owo ti o tẹle awọn tita. Awọn ohun elo miiran (fun apẹẹrẹ, awọn ọna ṣiṣe ERP) dara julọ fun awọn ohun elo to tẹle. Nitorinaa, igbagbogbo ni adaṣe ti lilo Magento iṣẹ-ṣiṣe ti iṣọpọ ile itaja kan pẹlu awọn eto miiran (fun apẹẹrẹ, 1C) dide.

Nipa ati nla, iṣọpọ le dinku si ẹda data nipasẹ:

  • katalogi (awọn ọja, awọn ẹka);
  • data akojo oja (awọn iwọntunwọnsi ọja ni awọn ile itaja ati awọn idiyele);
  • awọn onibara;
  • awọn ibere;

Magento nfunni ni kilasi lọtọ ti awọn nkan fun ifọwọyi data ninu aaye data - awọn ibi ipamọ. Nitori awọn pato ti Magento, fifi data kun si ibi ipamọ data nipasẹ awọn ibi ipamọ jẹ rọrun lati koodu, ṣugbọn o jẹ, jẹ ki a sọ, o lọra. Ninu atẹjade yii, Mo gbero awọn ipele akọkọ ti fifi ọja kun ni eto si Magento 2 ni ọna “Ayebaye” - lilo awọn kilasi repo.

Awọn alabara ati awọn aṣẹ ni a tun ṣe nigbagbogbo ni itọsọna miiran - lati Magento si awọn eto ERP ita. Nitorinaa, o rọrun pẹlu wọn, ni ẹgbẹ Magento o kan nilo lati yan data ti o yẹ, ati lẹhinna “awako fò jade lati ẹgbẹ wa".

Awọn ilana ti gbigbasilẹ data sinu ibi ipamọ data

Ni akoko yii, ṣiṣẹda awọn nkan ti o fipamọ sinu ibi ipamọ data ni eto ni Magento ti ṣee nipasẹ factory:

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

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

ati kikọ si awọn database ti wa ni ṣe nipasẹ Atunjade:

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

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

Ọna “Factory” ati “Ibi ipamọ” le ṣee lo fun gbogbo awọn awoṣe pataki ni agbegbe Magento 2.

Ipilẹ ọja Alaye

Mo n wo igbekalẹ data ti o baamu ẹya Magento 2.3. Alaye ipilẹ julọ nipa ọja wa ninu tabili catalog_product_entity (Iforukọsilẹ ọja):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Mo ni opin si iru ọja kan (type_id='simple'), akojọpọ awọn abuda aifọwọyi (attribute_set_id=4) ati foju awọn abuda has_options и required_options. Niwon awọn eroja entity_id, created_at и updated_at ti ipilẹṣẹ laifọwọyi, lẹhinna, ni otitọ, lati ṣafikun ọja tuntun, a kan nilo lati ṣeto sku. Mo ṣe eyi:

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

ati pe Mo gba imukuro:

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

Mo ṣafikun orukọ ọja si ibeere naa ki o gba ifiranṣẹ ti abuda naa ti nsọnu Price. Lẹhin fifi idiyele kun, ọja naa ni afikun si ibi ipamọ data:

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

Orukọ ọja naa wa ni ipamọ sinu tabili abuda varchar ọja (catalog_product_entity_varchar), owo - ninu tabili catalog_product_entity_decimal. Ṣaaju fifi ọja kun, o ni imọran lati fihan ni gbangba pe a nlo iwaju ile itaja iṣakoso lati gbe data wọle:

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

Afikun eroja

Ṣiṣe awọn abuda ọja afikun ni lilo Magento jẹ idunnu. Awoṣe data EAV fun awọn nkan akọkọ (wo tabili eav_entity_type) jẹ ọkan ninu awọn ẹya pataki ti pẹpẹ yii. A nìkan ṣafikun awọn abuda ti o yẹ si awoṣe ọja naa:

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

ati nigba fifipamọ awoṣe nipasẹ ohun elo repo:

$repoProd->save($prod);

awọn eroja afikun yoo tun wa ni ipamọ ni awọn tabili data data ti o baamu.

Oja data

Ni awọn ọrọ ti o rọrun - iye ọja ni iṣura. Ni Magento 2.3, awọn ẹya ninu ibi ipamọ data ti o ṣe apejuwe ọna kika fun titoju data akojo oja jẹ significantly o yatọ lati ohun to sele ṣaaju ki o to. Bibẹẹkọ, fifi iye ọja kun ni iṣura nipasẹ awoṣe ọja ko nira pupọ ju fifi awọn abuda miiran kun:

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

Media

Gẹgẹbi ofin, atilẹyin media fun ọja kan fun alabara ni ile itaja (e-commerce) yatọ si atilẹyin media fun ọja kanna fun oṣiṣẹ ninu eto ṣiṣe iṣiro inu (ERP). Ni ọran akọkọ, o ni imọran lati ṣafihan ọja naa ni oju si oju; Sibẹsibẹ, gbigbe o kere ju aworan akọkọ ti ọja jẹ ohun ti o wọpọ. case nigbati akowọle data.

Nigbati o ba nfi aworan kun nipasẹ igbimọ abojuto, aworan naa ti wa ni fipamọ ni akọkọ ni itọsọna igba diẹ (./pub/media/tmp/catalog/product) ati pe nigba fifipamọ ọja naa ti gbe lọ si itọsọna media (./pub/media/catalog/product). Paapaa, nigba ti o ba ṣafikun nipasẹ nronu abojuto, aworan naa jẹ aami 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);

Fun idi kan, media ti sopọ nikan lẹhin fifipamọ ọja akọkọ ati gbigba pada lati ibi ipamọ lẹẹkansi. Ati pe o nilo lati pato awọn abuda naa label nigbati o ba ṣafikun titẹsi si ibi iṣafihan ọja ọja (bibẹẹkọ a gba imukuro Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Ilana

Nigbagbogbo, eto ẹka ti ile itaja ati ohun elo ẹhin tabi gbigbe awọn ọja sinu wọn le yatọ ni pataki. Awọn ilana fun gbigbe data nipa awọn ẹka ati awọn ọja laarin wọn da lori ọpọlọpọ awọn ifosiwewe. Ninu apẹẹrẹ yii Mo duro si atẹle naa:

  • backend ati itaja isori ti wa ni akawe nipa orukọ;
  • ti o ba jẹ pe ẹka kan wọle ti ko si ninu ile itaja, lẹhinna o ṣẹda labẹ ẹka root (Default Category) ati awọn oniwe-si siwaju sii ipo ninu awọn itaja katalogi ti wa ni assumed pẹlu ọwọ;
  • ọja ti wa ni sọtọ si ẹka kan nikan nigbati o ba ṣẹda ninu ile itaja (gbewọle akọkọ);

Alaye ipilẹ nipa ẹka wa ninu tabili catalog_category_entity (katalogi ti awọn ẹka). Ṣiṣẹda ẹka kan ni Magento:

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

Sisopọ ọja kan si ẹka kan ni a ṣe ni lilo ID ẹya ati SKU ọja:

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

Lapapọ

Koodu kikọ lati ṣafikun ọja ni siseto si Magento 2 jẹ irọrun pupọ. Mo ti dapọ ohun gbogbo ti a sọ loke sinu module demo kan "flancer32 / mage2_ext_demo_import". Nibẹ jẹ nikan kan console pipaṣẹ ni module fl32:import:prod, eyiti o ṣe agbewọle awọn ọja ti a ṣalaye ninu faili JSON "./etc/data/products.json":

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

Awọn aworan fun agbewọle wa ninu katalogi ./etc/data/img.

Akoko lati gbe awọn ọja 10 wọle ni lilo ọna yii jẹ bii iṣẹju-aaya 10 lori kọǹpútà alágbèéká mi. Ti a ba se agbekale ero yii siwaju sii, o rọrun lati wa si ipari pe nipa awọn ọja 3600 ni a le gbe wọle fun wakati kan, ati pe o le gba to wakati 100 lati gbe awọn ọja 30K wọle. Rirọpo kọǹpútà alágbèéká kan pẹlu olupin gba ọ laaye lati rọra ipo naa ni itumo. Boya paapaa ni igba pupọ. Ṣugbọn kii ṣe nipasẹ awọn aṣẹ ti titobi. Boya iyara ati ilọra yii jẹ si diẹ ninu awọn idi fun ifarahan iṣẹ naa magento/async-gbe wọle.

Ojutu ipilẹṣẹ lati mu iyara ti agbewọle wọle le jẹ titẹsi taara si ibi ipamọ data, ṣugbọn ninu ọran yii gbogbo “awọn ire” nipa imudara ti Magento ti sọnu - iwọ yoo ni lati ṣe ohun gbogbo “ti ni ilọsiwaju” funrararẹ. Sibẹsibẹ, o tọ si. Ti o ba ṣiṣẹ, Emi yoo ṣe akiyesi ọna pẹlu kikọ taara si ibi ipamọ data ni nkan ti o tẹle.

orisun: www.habr.com

Fi ọrọìwòye kun