Magento 2: Kupinza Zvigadzirwa kubva Kunze Kwekunze

Magento ndeye e-commerce mhinduro, i.e. yakanangana nekutengesa zvigadzirwa pane kuchengetera zvinhu, logistics kana accounting yemari inoperekedza kutengesa. Mamwe maapplication (semuenzaniso, ERP masisitimu) anonyatsokodzera kuperekedza maapplication. Naizvozvo, kazhinji mukuita kwekushandisa Magento basa rekubatanidza chitoro nemamwe masisitimu aya (semuenzaniso, 1C) inomuka.

Kakawanda, kubatanidzwa kunogona kuderedzwa kukudzokorora kwedata ne:

  • catalog (zvigadzirwa, zvikamu);
  • inventory data (yechigadzirwa zviyero mumatura uye mitengo);
  • vatengi;
  • orders;

Magento inopa rakaparadzana kirasi yezvinhu zvekushandisa data mu database - repositories. Nekuda kwezvakajeka zveMagento, kuwedzera data kune dhatabhesi kuburikidza nemarekodhi zviri nyore kunyora, asi zviri, ngatiti, zvishoma. Muchinyorwa chino, ini ndinofunga matanho makuru ekuwedzera chigadzirwa kuMagento 2 nenzira ye "classic" - uchishandisa repo makirasi.

Vatengi uye maodha zvinowanzodzokororwa kune rimwe divi - kubva kuMagento kuenda kune ekunze ERP masisitimu. Naizvozvo, zviri nyore navo, kudivi reMagento iwe unongoda kusarudza data rakakodzera, uyezve "mabara akabhururuka achibva parutivi pedu".

Misimboti yekurekodha data mudhatabhesi

Parizvino, kugadzira zvinhu zvakachengetwa mudhatabhesi zvakarongeka muMagento kunoitwa kuburikidza fekitari:

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

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

uye kunyora kune database kunoitwa kuburikidza Repository:

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

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

Iyo "Factory" uye "Repository" nzira inogona kushandiswa kune ese makuru mamodheru muMagento 2 domain.

Basic Product Information

Ndiri kutarisa chimiro che data chinoenderana neMagento 2.3 vhezheni. Ruzivo rwakanyanya nezvechigadzirwa rwuri mutafura catalog_product_entity (chigadzirwa registry):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Ini ndinogumira kune imwe mhando yechigadzirwa (type_id='simple'), seti yezvakagadzika hunhu (attribute_set_id=4) uye kufuratira hunhu has_options ΠΈ required_options. Kubva pane hunhu entity_id, created_at ΠΈ updated_at zvinogadzirwa otomatiki, saka, kutaura zvazviri, kuwedzera chigadzirwa chitsva, isu tinongoda kuseta sku. Ndinoita izvi:

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

uye ndinowana kusarudzika:

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

Ini ndinowedzera zita rechigadzirwa kuchikumbiro uye ndinowana meseji yekuti hunhu hwashaikwa Price. Mushure mekuwedzera mutengo, chigadzirwa chinowedzerwa kune dhatabhesi:

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

Iro zita rechigadzirwa rinochengetwa mune chigadzirwa varchar hunhu tafura (catalog_product_entity_varchar), mutengo - mutafura catalog_product_entity_decimal. Tisati tawedzera chigadzirwa, zvinokurudzirwa kuratidza pachena kuti tiri kushandisa administrative storefront kupinza data:

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

Zvimwe Zvimiro

Kugadzira zvimwe zvigadzirwa hunhu uchishandisa Magento zvinonakidza. EAV data modhi yemasangano makuru (ona tafura eav_entity_type) ndechimwe chezvinhu zvakakosha zvepuratifomu iyi. Isu tinongowedzera hunhu hwakakodzera kune chigadzirwa modhi:

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

uye kana uchichengetedza modhi kuburikidza nechinhu che repo:

$repoProd->save($prod);

humwe hunhu hunozochengetwawo mumatafura edatabase anowirirana.

Inventory data

Mumashoko akareruka - huwandu hwechigadzirwa muzvitoro. MuMagento 2.3, zvimiro zviri mudhatabhesi zvinotsanangura mafomati ekuchengetera data rezvinyorwa ndizvo zvakasiyana zvakanyanya kubva pane zvakaitika kare. Nekudaro, kuwedzera huwandu hwechigadzirwa chiri mustock kuburikidza neiyo chigadzirwa modhi haina kuoma zvakanyanya pane kuwedzera humwe hunhu:

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

Media

Semutemo, tsigiro yenhau yechigadzirwa chemutengi muchitoro (e-commerce) inosiyana nerutsigiro rwenhau kune chimwe chigadzirwa chemushandi mune yemukati accounting system (ERP). Muchiitiko chekutanga, zvinokurudzirwa kuratidza chigadzirwa chiso nechiso; mune yechipiri, zvakakwana kupa pfungwa yakajairika yechigadzirwa. Nekudaro, kutamisa kanenge mufananidzo wekutanga wechigadzirwa kwakajairika. case paunenge uchipinza data.

Kana uchiwedzera mufananidzo kuburikidza nepaneru ye admin, mufananidzo unotanga kuchengetwa mudura renguva pfupi (./pub/media/tmp/catalog/product) uye chete kana kuchengetedza chigadzirwa kuchiendeswa kune media dhairekitori (./pub/media/catalog/product) Zvakare, kana yawedzerwa kuburikidza nepaneru ye admin, mufananidzo unoiswa 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);

Nekuda kwechimwe chikonzero, midhiya inobatanidzwa chete mushure mekutanga kuchengetedza chigadzirwa nekuchitora kubva mudura zvakare. Uye unofanira kutsanangura hunhu label kana tichiwedzera yekupinda kune chigadzirwa media gallery (zvikasadaro isu tinowana kusarudzika Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Zvikwata

Kazhinji, chimiro chechikamu chechitoro uye yekumashure application kana kuiswa kwezvigadzirwa mazviri zvinogona kusiyana zvakanyanya. Matanho ekufambisa data nezvezvikamu uye zvigadzirwa mukati mazvo zvinoenderana nezvakawanda zvinhu. Mumuenzaniso uyu ndinonamatira kune zvinotevera:

  • backend uye zvikamu zvezvitoro zvinofananidzwa nemazita;
  • kana chikamu chinotengeswa kunze kwenyika chisiri muchitoro, chinogadzirwa pasi pechikamu chemidzi (Default Category) uye kuenderera mberi kwayo muchitoro katalogi inofungidzirwa nemaoko;
  • chigadzirwa chinopihwa kune chikamu chete kana chagadzirwa muchitoro (kutanga kupinza);

Ruzivo rwekutanga nezvechikamu rwuri mutafura catalog_category_entity (katalogi yezvikamu). Kugadzira chikamu muMagento:

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

Kubatanidza chigadzirwa kune chikamu kunoitwa uchishandisa iyo chikamu ID uye chigadzirwa SKU:

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

Total

Kunyora kodhi yekuwedzera chigadzirwa zvakarongwa kuMagento 2 zviri nyore. Ini ndakabatanidza zvese zvataurwa pamusoro kuita demo module "flancer32/mage2_ext_demo_import". Pane chete console command mune module fl32:import:prod, iyo inopinza zvigadzirwa zvinotsanangurwa mufaira reJSON "./etc/data/products.json":

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

Mifananidzo yekutenga kunze iri mukatalogi ./etc/data/img.

Nguva yekupinza zvigadzirwa gumi uchishandisa nzira iyi ingangoita masekonzi gumi palaptop yangu. Kana tikakudziridza pfungwa iyi zvakare, zviri nyore kusvika pamhedziso yekuti zvingangosvika mazana matatu nemazana matanhatu zvigadzirwa zvinogona kutengwa kunze kweawa, uye zvinogona kutora maawa makumi matatu kupinza zvigadzirwa zve10K. Kutsiva laptop neseva kunotendera iwe kuti ugadzirise mamiriro acho. Pamwe kunyange kakawanda. Asi kwete nemirairo yehukuru. Zvichida uku kukurumidza uye kunonoka kune imwe nhanho imwe yezvikonzero zvekubuda kweprojekti magento/async-import.

Mhinduro yakasimba yekuwedzera kukurumidza kwekutumira inogona kuve yakananga kupinda mudhatabhesi, asi mune iyi nyaya zvese "zvakanaka" zvine chekuita nekuwedzera kweMagento zvakarasika - uchafanirwa kuita zvese "mberi" iwe pachako. Zvisinei, zvakakodzera. Kana ikashanda, ini ndichafunga nzira yacho nekunyora zvakananga kune database munyaya inotevera.

Source: www.habr.com

Voeg