Magento 2: Ka soo dejinta Alaabta Dibadda

Magento waa xal e-ganacsi, i.e. ayaa looga danleeyahay iibinta alaabada marka loo eego bakhaarka, saadka ama xisaabaadka maaliyadeed ee la socda iibka. Codsiyada kale (tusaale ahaan, nidaamyada ERP) ayaa ku habboon codsiyada la socda. Sidaa darteed, inta badan dhaqanka isticmaalka Magento hawsha isku dhafka bakhaarka nidaamyada kale (tusaale ahaan, 1C) ayaa soo baxda.

Guud ahaan, is dhexgalka waxa lagu yarayn karaa ku celcelinta xogta iyadoo:

  • buug-yaraha (alaabta, qaybaha);
  • xogta alaabada (isku-dheelitirnaanta alaabta ee bakhaarada iyo qiimaha);
  • macaamiisha;
  • amarada;

Magento waxa ay soo bandhigtaa walax gaar ah oo lagu maamulayo xogta kaydka - kayd. Sababtoo ah waxyaabaha gaarka ah ee Magento, ku darida xogta xogta xogta iyada oo loo marayo kaydinta waa sahlan tahay in la codeeyo, laakiin waa, aynu nidhaahno, gaabis ah. Daabacaaddan, waxaan tixgelinayaa marxaladaha ugu muhiimsan ee barnaamij ahaan loogu daro badeecada Magento 2 ee habka "classic" - adoo isticmaalaya fasalada repo.

Macaamiisha iyo dalabaadka waxaa badanaa lagu soo rogaa jihada kale - laga bilaabo Magento ilaa nidaamyada ERP dibadda. Sidaa darteed, way ku fududahay iyaga, dhanka Magento waxaad u baahan tahay inaad doorato xogta ku habboon, ka dibna "xabbado ayaa naga soo duulayΒ«.

Mabaadi'da duubista xogta ee kaydinta xogta

Waqtigan xaadirka ah, abuurista walxaha lagu keydiyo xogta si barnaamij ahaan Magento ayaa la sameeyaa Factory:

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

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

iyo in loo qoro kaydka xogta waa la sameeyaa Repository:

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

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

Habka "Warshada" iyo "Repository" waxaa loo isticmaali karaa dhammaan moodooyinka waaweyn ee goobta Magento 2.

Macluumaadka Alaabta aasaasiga ah

Waxaan eegayaa qaab-dhismeedka xogta ee ku habboon nooca Magento 2.3. Macluumaadka aasaasiga ah ee ku saabsan alaabta ayaa ku jira miiska catalog_product_entity (Diiwaanka alaabta):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Waxaan ku koobanahay hal nooc oo badeecad ah (type_id='simple'), oo ah sifooyin aan caadi ahayn (attribute_set_id=4) iskana indha tirto sifooyinka has_options ΠΈ required_options. Tan iyo sifooyinka entity_id, created_at ΠΈ updated_at si toos ah ayaa loo soo saaraa, ka dib, dhab ahaantii, si loogu daro badeecad cusub, waxaan u baahanahay kaliya inaan dejino sku. waxan sameeyaa:

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

waxaanan helay wax ka reeban:

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

Waxaan ku daraa magaca alaabta codsiga oo aan helo fariin ah in sifada ay maqan tahay Price. Kadib marka lagu daro qiimaha, badeecada waxaa lagu daraa xogta macluumaadka:

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

Magaca alaabta waxa lagu kaydiyaa miiska sifada varchar (catalog_product_entity_varchar), qiimaha - miiska catalog_product_entity_decimal. Kahor intaadan ku darin badeecada, waxaa lagu talinayaa in si cad loo tilmaamo inaan isticmaaleyno dukaanka maamulka si aan u soo dejino xogta:

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

Sifooyin Dheeraad ah

Ka baaraandegidda sifooyin badeecooyin dheeri ah iyadoo la adeegsanayo Magento waa wax lagu farxo. Qaabka xogta EAV ee hay'adaha waaweyn (eeg shaxda eav_entity_type) waa mid ka mid ah sifooyinka ugu muhiimsan ee madal. Waxaan si fudud ugu darnaa sifooyinka ku habboon qaabka alaabta:

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

iyo marka lagu badbaadinayo moodalka iyada oo loo marayo shayga repo:

$repoProd->save($prod);

sifooyin dheeraad ah ayaa sidoo kale lagu kaydin doonaa miisaska xogta ee u dhigma.

Xogta alaabada

Marka la eego shuruudaha fudud - qadarka alaabta kaydka ah. Magento 2.3, qaab dhismeedka kaydka xogta ee qeexaya qaabka kaydinta xogta alaabada waa si weyn u kala duwan wixii hore u dhacay. Si kastaba ha ahaatee, ku darida tirada alaabta kaydka ah iyada oo loo marayo qaabka alaabta aad ugama dhib badna ku darida sifooyinka kale:

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

Warbaahinta

Sida caadiga ah, taageerada warbaahinta ee badeecada macmiilka dukaanka (e-commerce) way ka duwan tahay taageerada warbaahinta ee isla badeecada shaqaalaha nidaamka xisaabinta gudaha (ERP). Xaaladda kowaad, waxaa lagu talinayaa in la muujiyo alaabta weji ka weji; marka labaad, waa ku filan in la siiyo fikrad guud ee alaabta. Si kastaba ha ahaatee, wareejinta ugu yaraan sawirka aasaasiga ah ee alaabta waa wax caadi ah. case marka xogta la soo dejinayo.

Marka sawirka lagu daro guddiga maamulka, sawirka waxaa marka hore lagu keydiyaa hagaha ku meel gaarka ah (./pub/media/tmp/catalog/productoo keliya marka kaydinta alaabta loo raro hagaha warbaahinta (./pub/media/catalog/product). Sidoo kale, marka lagu daro guddiga maamulka, sawirka waa la calaamadiyay 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);

Sababaha qaar, warbaahinta ayaa ku xiran kaliya ka dib marka ugu horeysa ee la badbaadiyo alaabta oo laga soo saaro bakhaarka mar kale. Oo waxaad u baahan tahay inaad qeexdo sifada label marka lagu daro gelitaanka gallery warbaahinta alaabta (haddii kale waxaan helnaa ka reeban Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Qaybaha

Badanaa, qaabka qaybta dukaanka iyo codsiga dhabarka ama meelaynta alaabta iyaga ayaa si weyn u kala duwanaan kara. Xeeladaha u haajiridda xogta ku saabsan qaybaha iyo badeecadaha dhexdooda waxay ku xidhan yihiin arrimo badan. Tusaalahan waxaan ku adkeysanayaa kuwa soo socda:

  • Qaybaha dambe iyo bakhaarka waxa la is barbar dhigaa magac ahaan;
  • haddii qayb la soo dhoofiyo oo aan ku jirin dukaanka, ka dibna waxaa lagu abuuray qaybta xididka (Default Category) iyo meelaynteeda dheeraadka ah ee buug-yaraha dukaanka ayaa loo qaatay gacanta;
  • badeecada waxaa loo qoondeeyay qayb kaliya marka lagu abuuro dukaanka (soo dejinta ugu horeysa);

Macluumaadka aasaasiga ah ee ku saabsan qaybta ayaa ku jira shaxda catalog_category_entity (buugga qaybaha). Abuuritaanka qayb gudaha Magento:

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

Ku xidhida badeecada qayb waxa lagu fuliyaa iyadoo la isticmaalayo aqoonsiga qaybta iyo SKU:

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

Wadarta

Qoritaanka koodka si loogu daro alaab barnaamij ahaan Magento 2 waa wax fudud. Wax kasta oo kor lagu sheegay waxaan ku daray module demo ah "flancer32/mage2_ext_demo_import" Waxa jira hal amar oo kaliya oo ku jira cutubka fl32:import:prod, kaas oo soo dejisa alaabta lagu sifeeyay faylka JSON "./etc/data/products.json":

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

Sawirada soo dejinta ayaa ku jira liiska ./etc/data/img.

Waqtiga lagu soo dejiyo 10 badeecooyin iyadoo la adeegsanayo habkan waa ilaa 10 ilbiriqsi oo ku saabsan laptop-kayga. Haddii aan sii horumarino fikraddan, way fududahay in la gaaro gunaanadka in qiyaastii 3600 oo badeecad ah la soo dejin karo saacaddii, waxayna qaadan kartaa ilaa 100 saacadood in la soo dejiyo 30K. Ku beddelashada Laptop-ka server-ka waxay kuu oggolaaneysaa inaad xoogaa hagaajiso xaaladda. Laga yaabee xitaa dhowr jeer. Laakin ma aha amarrada baaxadda leh. Waxaa laga yaabaa in xawaarahan iyo gaabiskani ilaa xad uu yahay mid ka mid ah sababaha soo ifbaxa mashruuca magento/async-import.

Xalka xagjirka ah ee lagu kordhinayo xawaaraha soo dejinta wuxuu noqon karaa gelitaanka tooska ah ee kaydinta xogta, laakiin kiiskan dhammaan "waxyaabaha" ku saabsan xoojinta Magento waa la luminayaa - waa inaad wax walba sameysaa "horumar" naftaada. Si kastaba ha ahaatee, waa u qalantaa. Haddii ay shaqeyso, waxaan tixgelin doonaa habka qorista tooska ah ee xogta macluumaadka ee maqaalka soo socda.

Source: www.habr.com

Add a comment