Magento II: Importare Products ex fontibus externis

Magento is an e-commerce solution, i.e. magis intendatur ad emendas res quam ad negotiationes, logistics vel nummarias ratihabitiones comitantium venditio. Aliae applicationes (exempli gratia systemata ERP) aptiores sunt ad applicationes comitandas. Ideo saepius in usu Magento utendi negotium conficiendi thesaurum cum his aliis systematibus (exempli gratia 1C) oritur.

Per et magnum, integratio ad notitia replicationis reduci potest;

  • catalogue (products, genera);
  • inventarium (productum staterae in horreis et pretia);
  • clientes;
  • Imperat;

Magento separatum genus obiecti ad notitias abusores in datorum datorum praebet - repositoria. Ob specialia Magento, per repositoria datorum datorum addendo facilis est ad codicem, sed est, dicamus, tarde. In hac publicatione praecipuas progressionis gradus programmatice addito facto ad Magento II in via "classica" - repo classes utens.

Clientes et ordines solent in alteram partem - a Magento ad systemata externa ERP replicari. Ergo simplicior cum illis est, in parte Magento necessarias notitias eligere debes, et deinde "glandes e latere nostro".

Principia memoriae notitia in database

In momento, creando res servatas in programmate datorum in Magento fit per Factory:

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

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

et scribens ad database fit per Demo Repository:

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

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

Accessus "Factoriae" et "repositorium" adhiberi potest omnibus exemplaribus maioribus in Magento 2 ditionibus.

Basic Product Information

Quaero structuram datam quae Magento 2.3 versioni congruit. Maxime basic notitia de facto in mensa catalog_product_entity (subcriptio productum);

entity_id
attribute_set_id
type_id
sku
has_options
required_options
created_at
updated_at

Ego sum limitata ad unum genus productum (type_id='simple') Statuto de default attributa (attribute_set_id=4) Et ignore attributa has_options и required_options. Cum attributis entity_id, created_at и updated_at automatice generantur, re vera, ut novum productum adde, mox opus est sku. Hoc facio;

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

et excipio:

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

Addo operis nomen ad petitionem et nuntium accipias quod attributum est absentis Price. Pretio addito, productum datorum additur:

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

Productum nomen in productum varchar attributum repositum est in mensa (catalog_product_entity_varchar) pretium - in mensa catalog_product_entity_decimal. Priusquam opus adiecerimus, expedite expresse indicare nos utamur administrativorum rerum ad notitias importandas:

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

Additional attributa

Processus additicius producti usus Magento attributus est voluptas. EAV notitia exemplar ad res principalis (vide mensam eav_entity_type) unum e notis clavis suggesti huius. Simpliciter adiungimus attributa convenientia ad exemplar productum;

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

et cum repo via servata exemplar obiectum:

$repoProd->save($prod);

additamenta etiam in tabulis datorum respondentium reponentur.

Inventarium notitia

Simpliciter - copia producti in stirpe. In Magento 2.3, structurae in datorum datorum quae describunt format ad inventarium reponendas notitias significantly diversis ex antecedentibus. Sed addere quantitatem producti in stirpe per exemplar productum non multo difficilius est quam alia attributa addere;

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

media

Pro regula, subsidia instrumentorum pro cliente in repositorio (e-commerce) differt a instrumentis subsidii eiusdem producti pro operario in ratio interna (ERP). In primo, expedit ostendere factum facie ad os: secundo, satis est communem rationem facti. Sed translatio saltem prima imago producti satis communis est. case cum notitia importat.

Cum imaginem addit per tabulam admin, imago primum in directorio temporali servata est (./pub/media/tmp/catalog/product) et solum cum salvis factis ad instrumentorum directorium movetur (./pub/media/catalog/product). Item, cum per tabula admin addita, imago tagged est 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);

Horum autem instrumentorum causa iungitur solum postquam primum productum servatum et illud e conditorio iterum recuperans. Et debes specificare attributum label cum addendo ingressum ad media gallery productum (alioquin accipimus exceptionem Undefined index: label in .../module-catalog/Model/Product/Gallery/CreateHandler.php on line 516).

genus

Saepe categoria structura copiae et applicationis backend seu collocatio productorum in eis signanter differre potest. Consilia migrandi data de categoriis et productis in eis a multis causis pendent. In hoc exemplo haereo quae sequuntur;

  • backend and store genera comparantur nominatim;
  • si praedicamentum importatur quod non est in copia, tum sub categoria radicis creatur (Default Category) eiusque ulterior locus in promptuarium manuale catalogum assumitur;
  • productum praedicationi tribuitur solum cum in copia (primum importatum);

Basic information about genus est in mensa catalog_category_entity (Catalogus praedicamentorum). Magento praedicamentum creando:

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

Vinculum productum ad genus fit per id genus et productum SKU utens:

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

in summa

Addere codicem scribens programmatice ad Magento 2 productum perfacile est. Omnia quae supra in demo moduli dicta sunt miscui "flancer32/mage2_ext_demo_import». Est una tantum moduli in imperio console fl32:import:prod, quae productos in tabella JSON descriptos importat ../etc/data/products.json";

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

Pictures pro importare in catalogo ./etc/data/img.

Tempus importare 10 productos utendi hac methodo fere 10 seconds in laptop meo est. Si hanc opinionem ulterius enucleemus, facile est ad conclusionem circiter 3600 producta per horam importari posse, et circiter 100 horas ad 30K productos importare. Reposito laptop cum servo permittit ut condicionem aliquantum explanet. Fortasse etiam pluries. Sed non iussu magnitudinis. Fortasse haec celeritas et tarditas aliquatenus est inter rationes evolutionis documenti magento/async-import.

Solutio radicalis ad augendam celeritatem importatus directam ingressum in datorum esse potuit, sed in hoc casu omnia "bona" ​​de Magento extensione pereunt - debebis facere omnia ipse "provectus". Sed id pretium est. Si operatur, accessum directo scripto ad database in proximo articulo considerabo.

Source: www.habr.com

Add a comment