Magento 2: Fa'aulufaleina o Oloa mai Punaoa i fafo

Magento o se fofo e-pisinisi, i.e. e sili atu le fa'amoemoe i le fa'atau atu o oloa nai lo le teuina, fa'amaumauga po'o fa'amatalaga tau tupe fa'atasi ma fa'atauga. O isi talosaga (fa'ata'ita'iga, faiga ERP) e sili atu ona fetaui mo talosaga fa'atasi. O le mea lea, e masani lava i le faʻaaogaina o Magento le galuega o le tuʻufaʻatasia o se faleoloa ma isi faiga (mo se faʻataʻitaʻiga, 1C) tulaʻi mai.

I le lautele, e mafai ona faʻaititia le tuʻufaʻatasia i faʻamatalaga faʻamaumauga e ala i:

  • fa'amaumauga (oloa, vaega);
  • fa'amaumauga o fa'amaumauga (paleni o oloa i faleteuoloa ma tau);
  • tagata fa'atau;
  • poloaiga;

Magento ofo atu se isi vasega o mea faitino mo le faʻaogaina o faʻamatalaga i totonu o faʻamaumauga - faleteuoloa. Ona o faʻamatalaga patino a Magento, faʻaopoopoina faʻamaumauga i luga o faʻamaumauga e ala i faleoloa e faigofie ona faʻamaonia, ae o, tatou fai atu, faʻagesegese. I lenei lomiga, ou te mafaufau i laʻasaga autu o le faʻapipiʻiina faʻapipiʻiina o se oloa i le Magento 2 i le "faʻapitoa" auala - faʻaaoga vasega repo.

O tagata fa'atau ma fa'atonuga e masani lava ona fa'atusa i le isi itu - mai le Magento i fafo atu o le ERP system. O le mea lea, e sili atu ona faigofie ia i latou, i le itu Magento e tatau ona e filifilia faʻamatalaga talafeagai, ona "na felelei mai pulufana mai lo matou itu".

Fa'avae o le fa'amauina o fa'amaumauga i totonu o fa'amaumauga

I le taimi nei, o le fatuina o mea faitino faʻasaoina i totonu o le database programmatically i Magento ua maeʻa fale gaosimea:

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

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

ma le tusitusi i le database e faia e ala i Faletupe:

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

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

Ole "Factory" ma le "Repository" e mafai ona faʻaogaina mo faʻataʻitaʻiga tetele uma ile Magento 2 domain.

Fa'amatalaga Fa'avae Oloa

O loʻo ou vaʻavaʻai i se fausaga faʻamaumauga e fetaui ma Magento 2.3 version. O faʻamatalaga sili ona taua e uiga i le oloa o loʻo i le laulau catalog_product_entity (resitala oloa):

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

E fa'atapula'aina a'u ile tasi ituaiga o oloa (type_id='simple'), se seti o uiga fa'aletonu (attribute_set_id=4) ma le amanaia uiga has_options и required_options. Talu mai uiga entity_id, created_at и updated_at e gaosia otometi, ona, o le mea moni, e faʻaopoopo se oloa fou, e tatau ona tatou seti sku. Ou te faia lenei mea:

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

ma ou te maua se tuusaunoaga:

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

Ou te faaopoopo le igoa o le oloa i le talosaga ma maua se savali o loʻo misi le uiga Price. A maeʻa ona faʻaopoopo le tau, faʻaopoopo le oloa ile faʻamaumauga:

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

O le igoa o le oloa o lo'o teuina i le laulau o uiga o oloa varchar (catalog_product_entity_varchar), tau - i le laulau catalog_product_entity_decimal. Aʻo leʻi faʻaopoopoina se oloa, e fautuaina e faʻaalia manino o loʻo matou faʻaogaina le faleoloa faʻapitoa e faʻaulu mai ai faʻamatalaga:

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

Uiga Faaopoopo

O le faʻaogaina o uiga faʻaopoopo oloa e faʻaaoga ai Magento o se fiafiaga. EAV fa'ata'ita'iga mo fa'alapotopotoga autu (silasila i le laulau eav_entity_type) o se tasi o vaega taua o lenei tulaga. Matou te faʻaopoopoina uiga talafeagai i le faʻataʻitaʻiga o oloa:

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

ma pe a faʻasaoina le faʻataʻitaʻiga e ala i le repo mea:

$repoProd->save($prod);

o uiga fa'aopoopo o le a teuina fo'i i totonu o laulau fa'amaumauga talafeagai.

Fa'amaumauga o fa'amaumauga

I ni faaupuga faigofie - o le aofaʻi o oloa i totonu o faʻasoa. I le Magento 2.3, fausaga i totonu o faʻamaumauga o loʻo faʻamatalaina le faatulagaga mo le teuina o faʻamaumauga o faʻamaumauga matua ese lava mai le mea na tupu muamua. Ae ui i lea, o le faʻaopoopoina o le aofaʻi o se oloa i totonu o faʻatauga e ala i le faʻataʻitaʻiga o oloa e le sili atu le faigata nai lo le faʻaopoopoina o isi uiga:

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

Faasalalauga

I le avea ai o se tulafono, o le lagolago a le aufaasālalau mo se oloa mo se tagata o tausia i totonu o se faleoloa (e-commerce) e ese mai le lagolago a le aufaasālalau mo le oloa lava lea e tasi mo se tagata faigaluega i totonu o se faiga faʻamaumauga i totonu (ERP). I le tulaga muamua, e fautuaina le faʻaalia o le oloa faʻasaga; i le lona lua, e lava le tuʻuina atu o se manatu lautele o le oloa. Ae ui i lea, o le fesiitaiga o le ata muamua o se oloa e masani lava. case pe a fa'aulufaleina fa'amaumauga.

Pe a faʻaopoopoina se ata e ala i le admin panel, o le ata e muamua faʻasaoina i se lisi le tumau (./pub/media/tmp/catalog/product) ma na'o le taimi e fa'asaoina ai le oloa e si'i atu i le fa'asalalauga fa'asalalau (./pub/media/catalog/product). E le gata i lea, pe a faʻaopoopo e ala i le admin panel, o le ata e faʻailogaina 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);

Mo nisi mafuaʻaga, e naʻo le fesoʻotaʻiga o le aufaasālalau pe a uma ona faʻasaoina muamua le oloa ma toe aumai mai le fale teu oloa. Ma e tatau ona e faʻamaonia le uiga label pe a faʻaopoopo se faʻamatalaga i le faʻasalalauga faʻasalalauga oloa (a leai matou te maua se tuusaunoaga Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

Vaega

E masani lava, o le vaega fausaga o le faleoloa ma le faʻaoga pito i tua poʻo le tuʻuina atu o oloa i totonu e mafai ona matua ese. Fuafuaga mo le femalaga'iga o fa'amatalaga e uiga i vaega ma oloa i totonu e fa'alagolago i le tele o mea. I lenei faʻataʻitaʻiga ou te pipii i mea nei:

  • vaega pito i tua ma faleoloa e faatusatusa i le igoa;
  • afai e faaulufale mai se vaega e le oi totonu o le faleoloa, ona faia lea i lalo o le vaega aʻa (Default Category) ma lona fa'atulagaina atili i totonu o le fa'amaumauga o faleoloa o lo'o fa'atinoina ma le lima;
  • o se oloa e tu'uina atu i se vaega na'o le taimi na faia ai i totonu o le faleoloa (muamua fa'aulufale mai);

O fa'amatalaga autu e uiga i le vaega o lo'o i le laulau catalog_category_entity (fa'amaumauga o vaega). Fausia se vaega i Magento:

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

Fa'afeso'ota'i se oloa i se vaega o lo'o fa'atinoina e fa'aaoga ai le ID vaega ma le SKU oloa:

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

Aofaʻi

Tusitusi code e faʻaopoopo ai se oloa faʻapipiʻiina i le Magento 2 e faigofie tele. Ua ou tuʻufaʻatasia mea uma o loʻo taʻua i luga i totonu o se faʻataʻitaʻiga module "flancer32/mage2_ext_demo_import". E na'o le tasi le fa'atonuga fa'amafanafana i totonu o le module fl32:import:prod, lea e fa'aulufale mai oloa o lo'o fa'amatalaina i le faila JSON "./etc/data/products.json":

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

O ata mo le fa'aulufale mai o lo'o i totonu o le lisi ./etc/data/img.

O le taimi e fa'aulufale mai ai oloa e 10 e fa'aaoga ai lenei metotia e tusa ma le 10 sekone i la'u komepiuta feavea'i. Afai tatou te atiina ae atili lenei manatu, e faigofie lava ona maua le faaiuga e tusa ma le 3600 oloa e mafai ona faaulufale mai i le itula, ma e mafai ona ave pe a ma le 100 itula e faaulufale mai ai oloa 30K. Suia se komepiuta feaveai ma se server e mafai ai ona e faʻalelei le tulaga. Atonu e oo lava i ni nai taimi. Ae le o se poloaiga o le tele. Masalo o lenei saoasaoa ma le tuai o se tasi lea o mafuaaga o le tulai mai o le poloketi magento/async-import.

O se fofo mataʻutia e faʻateleina ai le saoasaoa o le faʻaulufale mai e mafai ona tuʻu saʻo i totonu o le database, ae i lenei tulaga o "mea lelei" uma e uiga i le faʻalauteleina o Magento ua leiloloa - e tatau ona e faia mea uma "agai i luma" oe lava. Ae ui i lea, e aoga. Afai e aoga, o le a ou mafaufau i le auala ma le tusitusi tuusao i le database i le isi tusiga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga