Magento 2- ပြင်ပအရင်းအမြစ်များမှ ထုတ်ကုန်များကို တင်သွင်းခြင်း။

Magento သည် e-commerce ဖြေရှင်းချက်၊ ဆိုလိုသည်မှာ၊ သိုလှောင်ရုံ၊ ထောက်ပံ့ပို့ဆောင်ရေး သို့မဟုတ် ငွေကြေးစာရင်းကိုင်တွင်ပါရှိသော ရောင်းချခြင်းထက် ကုန်ပစ္စည်းများကို ရောင်းချရန် ပိုမိုရည်ရွယ်ပါသည်။ အခြားသော အပလီကေးရှင်းများ (ဥပမာ၊ ERP စနစ်များ) သည် ပါ၀င်သည့် အက်ပ်လီကေးရှင်းများအတွက် ပိုသင့်တော်ပါသည်။ ထို့ကြောင့်၊ Magento ကိုအသုံးပြုခြင်း၏အလေ့အကျင့်တွင်ဤအခြားစနစ်များနှင့်စတိုးဆိုင်တစ်ခုကိုပေါင်းစည်းခြင်းတာဝန် (ဥပမာ 1C) ဖြစ်ပေါ်လာသည်။

အများအားဖြင့်၊ ပေါင်းစည်းမှုကို ဒေတာပုံတူပွားခြင်းသို့ လျှော့ချနိုင်သည်-

  • ကက်တလောက် (ထုတ်ကုန်များ၊ အမျိုးအစားများ);
  • စာရင်းအချက်အလက် (သိုလှောင်ရုံများနှင့် ဈေးနှုန်းများတွင် ကုန်ပစ္စည်းလက်ကျန်များ);
  • ဖောက်သည်များ;
  • အမိန့်;

Magento သည် ဒေတာဘေ့စ်အတွင်း ဒေတာကို အသုံးချရန်အတွက် သီးခြားအရာဝတ္ထုများကို ပံ့ပိုးပေးသည်- သိုလှောင်မှုများ. Magento ၏ သီးခြားထူးခြားချက်များကြောင့်၊ သိမ်းဆည်းမှုများမှတစ်ဆင့် ဒေတာဘေ့စ်သို့ ဒေတာထည့်ခြင်းသည် ကုဒ်လုပ်ရန် လွယ်ကူသော်လည်း ၎င်းသည် နှေးကွေးသည်ဟု ဆိုကြပါစို့။ ဤထုတ်ဝေမှုတွင်၊ Repo အတန်းများကို အသုံးပြု၍ "ဂန္ထဝင်" နည်းလမ်းဖြင့် ထုတ်ကုန်တစ်ခုကို Magento 2 သို့ ပရိုဂရမ်ထည့်သွင်းခြင်း၏ အဓိကအဆင့်များကို စဉ်းစားပါသည်။

ဖောက်သည်များနှင့် အမှာစာများကို Magento မှ ပြင်ပ ERP စနစ်များသို့ အခြားဦးတည်ချက်ဖြင့် ပုံတူပွားလေ့ရှိသည်။ ထို့ကြောင့်၊ Magento ဘက်မှ သင့်လျော်သောဒေတာကို သင်ရွေးချယ်ရန် လိုအပ်ပြီး ၎င်းတို့နှင့် ပိုမိုရိုးရှင်းသည်၊ ထို့နောက် "ကျည်ဆံတွေက ငါတို့ဘက်ခြမ်းကနေ ပျံထွက်သွားတယ်။"။

ဒေတာဘေ့စ်တစ်ခုသို့ မှတ်တမ်းတင်ခြင်းဆိုင်ရာ အခြေခံမူများ

လောလောဆယ်တွင် Magento တွင် ပရိုဂရမ်စနစ်ဖြင့် ဒေတာဘေ့စ်တွင် သိမ်းဆည်းထားသည့် အရာဝတ္ထုများကို ဖန်တီးခြင်းအား လုပ်ဆောင်သည်။ အလုပ်ရုံ:

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

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

ဒေတာဘေ့စ်သို့စာရေးခြင်းဖြင့်လုပ်ဆောင်သည်။ repository:

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

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

"Factory" နှင့် "Repository" ချဉ်းကပ်မှုကို Magento 2 ဒိုမိန်းရှိ အဓိကမော်ဒယ်များအားလုံးအတွက် အသုံးပြုနိုင်ပါသည်။

အခြေခံထုတ်ကုန်အချက်အလက်

Magento 2.3 ဗားရှင်းနှင့် ကိုက်ညီသည့် ဒေတာဖွဲ့စည်းပုံကို ကြည့်နေသည်။ ထုတ်ကုန်နှင့်ပတ်သက်သော အခြေခံအကျဆုံးအချက်အလက်သည် ဇယားတွင်ဖြစ်သည်။ catalog_product_entity (ထုတ်ကုန်မှတ်ပုံတင်ခြင်း):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

ကျွန်ုပ်သည် ကုန်ပစ္စည်း တစ်မျိုးတည်းကိုသာ ကန့်သတ်ထားသည် (type_id='simple') ပုံသေ ရည်ညွှန်းချက်များ အစုတစ်ခု (attribute_set_id=4) ဂုဏ်တော်များကို လျစ်လျူရှုပါ။ has_options и required_options. ဘုရားဂုဏ်တော်ကစလို့ entity_id, created_at и updated_at အလိုအလျောက်ထုတ်ပေးကြသည်၊ ထို့ကြောင့်၊ အမှန်တကယ်တွင်၊ ထုတ်ကုန်အသစ်တစ်ခုထည့်ရန်၊ ကျွန်ုပ်တို့သည် သတ်မှတ်ရန်သာ လိုအပ်ပါသည်။ sku. ငါဒီလိုလုပ်တယ်

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

ပြီးတော့ ကျွန်တော် ခြွင်းချက်တစ်ခု ရလိုက်တယ်

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

တောင်းဆိုချက်တွင် ထုတ်ကုန်အမည်ကို ထည့်လိုက်ပြီး ရည်ညွှန်းချက် ပျောက်ဆုံးနေသည့် မက်ဆေ့ချ်ကို ရရှိပါသည်။ Price. စျေးနှုန်းထည့်ပြီးနောက်၊ ထုတ်ကုန်ကို ဒေတာဘေ့စ်သို့ ပေါင်းထည့်သည်-

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

ထုတ်ကုန်အမည်ကို ထုတ်ကုန် varchar ရည်ညွှန်းချက်ဇယားတွင် သိမ်းဆည်းထားသည် (catalog_product_entity_varchar) စျေးနှုန်း - ဇယား catalog_product_entity_decimal. ထုတ်ကုန်တစ်ခုမထည့်မီ၊ ဒေတာတင်သွင်းရန် စီမံခန့်ခွဲရေးစတိုးမျက်နှာစာကို ကျွန်ုပ်တို့အသုံးပြုနေကြောင်း အတိအလင်းဖော်ပြရန် အကြံပြုလိုပါတယ်-

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

အပိုဂုဏ်ရည်များ

Magento ကို အသုံးပြု၍ အပိုထုတ်ကုန်အရည်အသွေးများကို လုပ်ဆောင်ခြင်းသည် ပျော်ရွှင်စရာဖြစ်သည်။ အဓိကအကြောင်းအရာများအတွက် EAV ဒေတာမော်ဒယ် (ဇယားကိုကြည့်ပါ။ eav_entity_type) သည် ဤပလပ်ဖောင်း၏ အဓိကအင်္ဂါရပ်များထဲမှ တစ်ခုဖြစ်သည်။ ကျွန်ုပ်တို့သည် ထုတ်ကုန်မော်ဒယ်သို့ သင့်လျော်သော အရည်အချင်းများကို ရိုးရိုးရှင်းရှင်း ပေါင်းထည့်သည်-

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

နှင့် repo အရာဝတ္ထုမှတဆင့် မော်ဒယ်ကို သိမ်းဆည်းသောအခါ၊

$repoProd->save($prod);

ထပ်လောင်း attribute များကို သက်ဆိုင်ရာ database tables များတွင်လည်း သိမ်းဆည်းပါမည်။

စာရင်းအချက်အလက်

ရိုးရှင်းသောအသုံးအနှုန်းများတွင် - စတော့ရှယ်ယာရှိထုတ်ကုန်ပမာဏ။ Magento 2.3 တွင်၊ စာရင်းဒေတာသိမ်းဆည်းခြင်းဖော်မတ်ကို ဖော်ပြသည့် ဒေတာဘေ့စ်ရှိ ဖွဲ့စည်းပုံများသည်၊ သိသိသာသာကွဲပြားသည်။ အရင်က အဖြစ်အပျက်တွေကနေ သို့သော်၊ ထုတ်ကုန်မော်ဒယ်မှတစ်ဆင့် စတော့ရှယ်ယာတွင်ရှိသော ကုန်ပစ္စည်းအရေအတွက်ကို ပေါင်းထည့်ခြင်းသည် အခြားသောဂုဏ်ရည်များထည့်ခြင်းထက် များစွာပို၍ခက်ခဲသည်မဟုတ်ပေ။

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

မီဒီယာ

စည်းကမ်းအရ၊ စတိုးဆိုင် (e-commerce) ရှိ ဖောက်သည်တစ်ဦးအတွက် ထုတ်ကုန်တစ်ခုအတွက် မီဒီယာပံ့ပိုးမှုသည် ဌာနတွင်းစာရင်းကိုင်စနစ် (ERP) ရှိ ဝန်ထမ်းတစ်ဦးအတွက် တူညီသောထုတ်ကုန်အတွက် မီဒီယာပံ့ပိုးမှုနှင့် ကွဲပြားသည်။ ပထမကိစ္စတွင်၊ ထုတ်ကုန်ကိုမျက်နှာချင်းဆိုင်ပြသရန်အကြံပြုလိုသည်၊ ဒုတိယတွင်၊ ထုတ်ကုန်နှင့် ပတ်သက်၍ ယေဘူယျအကြံဥာဏ်ပေးရန်အတွက်လုံလောက်သည်။ သို့သော်၊ အနည်းဆုံး ထုတ်ကုန်တစ်ခု၏ မူလပုံသဏ္ဍာန်ကို လွှဲပြောင်းခြင်းသည် အတော်လေးကို ဘုံဖြစ်သည်။ case ဒေတာတင်သွင်းသည့်အခါ။

စီမံခန့်ခွဲသူဘောင်မှတဆင့် ပုံတစ်ပုံကို ထည့်သောအခါ၊ ရုပ်ပုံအား ယာယီလမ်းညွှန်တွင် ပထမဆုံးသိမ်းဆည်းသည် (./pub/media/tmp/catalog/product) နှင့် ထုတ်ကုန်ကို သိမ်းဆည်းသည့်အခါမှသာ မီဒီယာလမ်းညွှန်သို့ ရွှေ့သည် (./pub/media/catalog/product) ထို့အပြင်၊ စီမံခန့်ခွဲသူဘောင်မှတစ်ဆင့် ထည့်သွင်းသည့်အခါ၊ ပုံအား တဂ်ထားသည်။ 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);

အကြောင်းတစ်ခုခုကြောင့်၊ ထုတ်ကုန်ကို ဦးစွာသိမ်းဆည်းပြီး ပြန်လည်သိမ်းဆည်းပြီးနောက်မှသာ မီဒီယာကို ချိတ်ဆက်ထားသည်။ သငျသညျ attribute ကိုသတ်မှတ်ရန်လိုအပ်သည်။ label ထုတ်ကုန်မီဒီယာပြခန်းသို့ ထည့်သွင်းသည့်အခါ (မဟုတ်ပါက ကျွန်ုပ်တို့သည် ခြွင်းချက်တစ်ခုဖြစ်သည်။ Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

အမျိုးအစား

မကြာခဏဆိုသလို၊ စတိုးဆိုင်၏ အမျိုးအစားဖွဲ့စည်းပုံနှင့် နောက်ခံအပလီကေးရှင်း သို့မဟုတ် ၎င်းတို့တွင် ထုတ်ကုန်များ၏ နေရာချထားမှုသည် သိသိသာသာ ကွဲပြားနိုင်သည်။ ၎င်းတို့အတွင်း အမျိုးအစားများနှင့် ထုတ်ကုန်များဆိုင်ရာ အချက်အလက်များကို ရွှေ့ပြောင်းခြင်းအတွက် မဟာဗျူဟာများသည် အချက်များစွာပေါ်တွင် မူတည်ပါသည်။ ဤဥပမာတွင် ကျွန်ုပ်သည် အောက်ပါအချက်ကို လိုက်နာပါသည်။

  • backend နှင့် store အမျိုးအစားများကို အမည်ဖြင့် နှိုင်းယှဉ်ထားပါသည်။
  • စတိုးတွင်မဟုတ်သောအမျိုးအစားတစ်ခုကိုတင်သွင်းပါက၊ ၎င်းကို root အမျိုးအစားအောက်တွင်ဖန်တီးထားသည် (Default Category) နှင့် စတိုးဆိုင် ကက်တလောက်တွင် ၎င်း၏ နောက်ထပ်နေရာချထားခြင်းကို ကိုယ်တိုင်ကိုယ်ကျ ယူဆပါသည်။
  • ထုတ်ကုန်တစ်ခုကို စတိုးဆိုင်တွင် ဖန်တီးထားမှသာ အမျိုးအစားတစ်ခုသို့ သတ်မှတ်ပေးသည် (ပထမတင်သွင်းခြင်း)၊

အမျိုးအစားနှင့်ပတ်သက်သော အခြေခံအချက်အလက်သည် ဇယားတွင်ရှိသည်။ catalog_category_entity (အမျိုးအစားများ၏ ကတ်တလောက်)။ Magento တွင် အမျိုးအစားတစ်ခုကို ဖန်တီးနေသည်-

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

ထုတ်ကုန်တစ်ခုအား အမျိုးအစားတစ်ခုသို့ ချိတ်ဆက်ခြင်းသည် အမျိုးအစား ID နှင့် ထုတ်ကုန် SKU ကို အသုံးပြု၍ လုပ်ဆောင်သည်-

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

စုစုပေါင်း

ထုတ်ကုန်တစ်ခုအား Magento 2 တွင် ပရိုဂရမ်ကျကျ ထည့်ရန် ကုဒ်ရေးခြင်းသည် အလွန်လွယ်ကူသည်။ အထက်ဖော်ပြပါ အရာအားလုံးကို သရုပ်ပြ module တစ်ခုအဖြစ် ပေါင်းစပ်လိုက်ပါပြီ"flacer32/mage2_ext_demo_import” . module တွင် console command တစ်ခုသာရှိသည်။ fl32:import:prodJSON ဖိုင်တွင် ဖော်ပြထားသည့် ထုတ်ကုန်များကို တင်သွင်းသည့် "./etc/data/products.json":

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

တင်သွင်းရန်အတွက် ပုံများသည် ကတ်တလောက်တွင် ရှိသည်။ ./etc/data/img.

ဤနည်းလမ်းကို အသုံးပြု၍ ထုတ်ကုန် 10 ခုတင်သွင်းရန်အချိန်သည် ကျွန်ုပ်၏လက်ပ်တော့ပေါ်တွင် 10 စက္ကန့်ခန့်ဖြစ်သည်။ ဤအကြံအစည်ကို ကျွန်ုပ်တို့ ထပ်မံတီထွင်ပါက၊ တစ်နာရီလျှင် ကုန်ပစ္စည်း ၃၆၀၀ ခန့် တင်သွင်းနိုင်ပြီး ကုန်ပစ္စည်း 3600K တင်သွင်းရန် နာရီ 100 ခန့် ကြာနိုင်သည်ဟု ကောက်ချက်ချရန် လွယ်ကူပါသည်။ လက်ပ်တော့တစ်လုံးကို ဆာဗာတစ်ခုဖြင့် အစားထိုးခြင်းသည် အခြေအနေကို အနည်းငယ် ချောမွေ့စေသည်။ အကြိမ်ပေါင်းများစွာတောင် ဖြစ်နိုင်တယ်။ ဒါပေမယ့် အတိုင်းအတာတစ်ခုအထိတော့ မဟုတ်ပါဘူး။ ဤအမြန်နှုန်းနှင့် နှေးကွေးမှုသည် ပရောဂျက်ပေါ်ပေါက်လာရသည့် အကြောင်းရင်းများထဲမှ အတိုင်းအတာတစ်ခုအထိ ဖြစ်နိုင်သည်။ magento/async-တင်သွင်းခြင်း။.

တင်သွင်းမှုအရှိန်မြှင့်ရန် အစွန်းရောက်ဖြေရှင်းချက်သည် ဒေတာဘေ့စ်ထဲသို့ တိုက်ရိုက်ဝင်ရောက်နိုင်သော်လည်း ဤအခြေအနေတွင် Magento ၏တိုးချဲ့နိုင်မှုနှင့်ပတ်သက်သော "ကောင်းသော" များအားလုံး ဆုံးရှုံးသွားသည် - သင်ကိုယ်တိုင် "အဆင့်မြင့်သော" အရာအားလုံးကို လုပ်ဆောင်ရမည်ဖြစ်သည်။ ဒါပေမယ့် အဲဒါကို ထိုက်တန်ပါတယ်။ အဆင်ပြေပါက နောက်ဆောင်းပါးတွင် database သို့ တိုက်ရိုက်စာရေးခြင်းဖြင့် ချဉ်းကပ်ပုံကို သုံးသပ်ပါမည်။

source: www.habr.com

မှတ်ချက် Add