Magento 2: බාහිර මූලාශ්‍රවලින් නිෂ්පාදන ආනයනය කිරීම

Magento යනු ඊ-වාණිජ්‍ය විසඳුමකි, i.e. ගබඩා කිරීම, සැපයුම් හෝ මූල්‍ය ගිණුම්කරණය සමඟ අලෙවියට වඩා නිෂ්පාදන විකිණීම ඉලක්ක කර ඇත. වෙනත් යෙදුම් (උදාහරණයක් ලෙස, ඊආර්පී පද්ධති) සමග යෙදුම් සඳහා වඩාත් සුදුසු වේ. එමනිසා, බොහෝ විට Magento භාවිතා කිරීමේ භාවිතයේදී මෙම අනෙකුත් පද්ධති සමඟ ගබඩාවක් ඒකාබද්ධ කිරීමේ කාර්යය පැන නගී (උදාහරණයක් ලෙස, 1C).

විශාල වශයෙන්, අනුකලනය දත්ත අනුකරණයට අඩු කළ හැක්කේ:

  • නාමාවලිය (නිෂ්පාදන, කාණ්ඩ);
  • ඉන්වෙන්ටරි දත්ත (ගබඩාවල සහ මිල ගණන් වල නිෂ්පාදන ශේෂයන්);
  • ගනුදෙනුකරුවන්;
  • නියෝග;

Magento දත්ත ගබඩාවේ දත්ත හැසිරවීම සඳහා වෙනම වස්තු පන්තියක් ඉදිරිපත් කරයි - ගබඩා. Magento හි විශේෂතා නිසා, ගබඩා හරහා දත්ත සමුදායට දත්ත එකතු කිරීම කේත කිරීම පහසුය, නමුත් එය මන්දගාමී වේ. මෙම ප්‍රකාශනයේ, “සම්භාව්‍ය” ආකාරයෙන් Magento 2 වෙත නිෂ්පාදනයක් වැඩසටහන්ගත ලෙස එක් කිරීමේ ප්‍රධාන අදියර මම සලකා බලමි - repo පන්ති භාවිතා කරමින්.

පාරිභෝගිකයින් සහ ඇණවුම් සාමාන්‍යයෙන් අනෙක් දිශාවට ප්‍රතිවර්තනය වේ - Magento සිට බාහිර ERP පද්ධති දක්වා. එමනිසා, එය ඔවුන් සමඟ සරල ය, Magento පැත්තෙන් ඔබට සුදුසු දත්ත තෝරා ගැනීමට අවශ්‍ය වේ, ඉන්පසු "අපේ පැත්තෙන් වෙඩි උණ්ඩ එළියට ගියා«.

දත්ත ගබඩාවකට දත්ත පටිගත කිරීමේ මූලධර්ම

මේ මොහොතේ, දත්ත සමුදායේ සුරකින ලද වස්තූන් Magento හි වැඩසටහන්ගතව නිර්මාණය කිරීම සිදු කරනු ලැබේ කර්මාන්ත ශාලාව:

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

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

සහ දත්ත සමුදායට ලිවීම සිදු කරනු ලැබේ ගබඩාව:

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

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

"කර්මාන්තශාලා" සහ "නිධිය" ප්‍රවේශය 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);

අමතර ගුණාංග අනුරූප දත්ත සමුදා වගු වලද ගබඩා කෙරේ.

ඉන්වෙන්ටරි දත්ත

සරල වචන වලින් - තොගයේ නිෂ්පාදන ප්රමාණය. 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);

මාධ්‍ය

රීතියක් ලෙස, වෙළඳසැලක (ඊ-වාණිජ්‍යය) සේවාදායකයකු සඳහා නිෂ්පාදනයක් සඳහා මාධ්‍ය සහාය අභ්‍යන්තර ගිණුම්කරණ පද්ධතියක (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);

කිසියම් හේතුවක් නිසා, මාධ්‍ය සම්බන්ධ වන්නේ ප්‍රථමයෙන් නිෂ්පාදිතය සුරැකීමෙන් සහ නැවත ගබඩාවෙන් එය ලබා ගැනීමෙන් පසුව පමණි. තවද ඔබ ගුණාංගය සඳහන් කළ යුතුය label නිෂ්පාදන මාධ්‍ය ගැලරිය වෙත ප්‍රවේශයක් එක් කරන විට (එසේ නොමැති නම් අපට ව්‍යතිරේකයක් ලැබේ Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

ප්රවර්ග

බොහෝ විට, ගබඩාවේ වර්ග ව්‍යුහය සහ පසුපෙළ යෙදුම හෝ ඒවායේ නිෂ්පාදන ස්ථානගත කිරීම සැලකිය යුතු ලෙස වෙනස් විය හැකිය. ඒවා තුළ ඇති කාණ්ඩ සහ නිෂ්පාදන පිළිබඳ දත්ත සංක්‍රමණය කිරීමේ උපාය මාර්ග බොහෝ සාධක මත රඳා පවතී. මෙම උදාහරණයේ දී මම පහත සඳහන් දේට ඇලී සිටිමි:

  • පසුපෙළ සහ ගබඩා කාණ්ඩ නමින් සංසන්දනය කෙරේ;
  • ගබඩාවේ නොමැති කාණ්ඩයක් ආනයනය කරන්නේ නම්, එය මූල කාණ්ඩය යටතේ නිර්මාණය වේ (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 වෙත ක්‍රමලේඛනාත්මකව නිෂ්පාදනයක් එක් කිරීමට කේතය ලිවීම ඉතා පහසුය. මම ඉහත සඳහන් කළ සියල්ල ආදර්ශන මොඩියුලයකට ඒකාබද්ධ කර ඇත "flancer32/mage2_ext_demo_import". මොඩියුලයේ ඇත්තේ එක් කොන්සෝල විධානයක් පමණි fl32:import:prod, JSON ගොනුවේ විස්තර කර ඇති නිෂ්පාදන ආනයනය කරයි "./etc/data/products.json":

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

ආනයනය සඳහා පින්තූර නාමාවලියෙහි ඇත ./etc/data/img.

මෙම ක්‍රමය භාවිතා කර නිෂ්පාදන 10ක් ආනයනය කිරීමට ගතවන කාලය මගේ ලැප්ටොප් එකේ තත්පර 10ක් පමණ වේ. අපි මෙම අදහස තවදුරටත් වර්ධනය කළහොත්, පැයකට නිෂ්පාදන 3600 ක් පමණ ආනයනය කළ හැකි බවට නිගමනයකට පැමිණීම පහසු වන අතර, නිෂ්පාදන 100K ආනයනය කිරීමට පැය 30 ක් පමණ ගත විය හැකිය. ලැප්ටොප් පරිගණකයක් සේවාදායකයක් සමඟ ප්‍රතිස්ථාපනය කිරීමෙන් තත්වය තරමක් දුරට සමනය කිරීමට ඔබට ඉඩ සලසයි. සමහර විට කිහිප වතාවක් පවා. නමුත් විශාලත්වයේ නියෝගයකින් නොවේ. සමහර විට මෙම වේගය සහ මන්දගාමිත්වය ව්යාපෘතියේ මතුවීමට එක් හේතුවක් විය හැකිය magento/async-import.

ආනයනයේ වේගය වැඩි කිරීම සඳහා රැඩිකල් විසඳුමක් දත්ත ගබඩාවට සෘජුවම ඇතුල් විය හැකිය, නමුත් මේ අවස්ථාවේ දී Magento හි විස්තාරණය පිළිබඳ සියලු "යහපත්" නැති වී යයි - ඔබට සෑම දෙයක්ම "උසස්" කිරීමට සිදුවනු ඇත. කෙසේ වෙතත්, එය වටිනවා. එය සාර්ථක වුවහොත්, දත්ත සමුදායට සෘජුවම ලිවීමේ ප්‍රවේශය මම ඊළඟ ලිපියෙන් සලකා බලමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න