Π articulus priorem Processum importandi productos in Magento 2 de more solito per exempla et repositoria descripsi. Usitatius processus notitiae nimis humilis celeritatem habet. My laptop was produceing about one product per second. In hac continuatione, joco modo considero ad importare productum - per directum ingressum in datorum, praeterendo vexillum Magento 2 machinationes (exempla, officinas, repositoria). Ordo graduum ad fructus importare potest accommodari cuilibet linguae programmationis quae cum MySQL operari potest.
Disclaimer: Magento pro parata functionality habet notitia import et fere, satis erit tibi. Attamen, si plenius imperium in processum importare debes, non limitatum ad limam CSV parandam quae habes, grata cat.
Codex ex scriptura utriusque articuli in Magento modulo spectari potest.flancer32/mage2_ext_demo_importΒ». Hic restrictiones aliquas secutus sum ut moduli codicem demo moduli simpliciorem redderet:
Producta tantum creata sunt, non renovata.
Unum CELLA
Tantum categoriae nomina importantur, sine structura
Productus recens descriptus nondum nomen aut descriptionem habet. Hoc totum fit EAV attributa. Hic est index productorum fundamentalium quae opus sunt ut producti recte in fronte exponantur:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Singula attributa huic producto adduntur (singulae obtinendae identifier et species attributi e codice suo omittuntur) ;
public function create($prodId, $attrCode, $attrValue)
{
$attrId = /* get attribute ID by attribute code */
$attrType = /* get attribute type [datetime|decimal|int|text|varchar]) by attribute code */
if ($attrId) {
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$tblName = 'catalog_product_entity_' . $attrType;
$table = $this->resource->getTableName($tblName);
$bind = [
'attribute_id' => $attrId,
'entity_id' => $prodId,
/* put all attributes to default store view with id=0 (admin) */
'store_id' => 0,
'value' => $attrValue
];
$conn->insert($table, $bind);
}
}
Codice utendo attributo, eius id genus et notitias determinamus (datetime, decimal, int, text, varchar) tunc scribe datam pro fenestra administrativa in mensa convenienti (store_id = 0).
His additis supra attributis productum, hanc imaginem in tabula admin accipias:
Inventarium notitia
Ex versione 2.3 in Magento proficiscentes, duae sunt tabulae parallelae quae reponunt informationem inventarii (producti quantitatis);
cataloginventory_*: vetus structura;
inventory_*: nova structura (MSI - Multi Source Inventory);
Indicium inventarium utriusque structurae addere debes, quia nova structura nondum a veteri prorsus absoluta est (verisimile est enim default CELLA in nova structura mensam involvit cataloginventory_stock_status quod inventory_stock_1).
cataloginventory_
Cum explicatis Magneto 2.3 initio habemus 2 entries in store_websitequae respondet duobus sitibus administrativo et principali cliente;
Hoc est, in nostra vetere structura unum tantum "CELLA" (.stock) et coniungitur cum website administrativo. Novas addit per admin panel sources/stocks in MSI (nova structura) non sequitur in novis entries in cataloginventory_stock.
Inventarium notitia de fructibus in antiqua structura initio in tabulis memoratur;
cataloginventory_stock_item
cataloginventory_stock_status
cataloginventory_stock_item
function createOldItem($prodId, $qty)
{
$isQtyDecimal = (((int)$qty) != $qty);
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_item');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'is_qty_decimal' => $isQtyDecimal,
'is_in_stock' => $isInStock,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}
cataloginventory_stock_status
function createOldStatus($prodId, $qty)
{
$isInStock = ($qty > 0);
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('cataloginventory_stock_status');
$bind = [
'product_id' => $prodId,
/* we use one only stock in 'cataloginventory' structure by default */
'stock_id' => 1,
'qty' => $qty,
'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
/* default stock is bound to admin website (see `cataloginventory_stock`) */
'website_id' => 0
];
$conn->insert($table, $bind);
}
inventory_
Initio, nova structura ad inventarium reponendas notitias continet 1"fons"(inventory_source):
in plano quo nexus ad venditionesque alveum occurrit (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Ex structuris notitiis diiudicandis, variae rationes venarum venditionum assumuntur, sed per defaltam tantum nexum "genus"-"website"(Nexus ad locum paginae sequitur in codice website - base).
Unus "storepluribus coniungi potest "fontibus" et unus "fons" - pluribus "apothecae"(multis-ad-multa relatione). Exceptiones defaltae sunt ".fons"Et"storeΒ». Non re-iunguntur aliis entibus (limitatio in codice gradu - errori "Non potest salvum facere nexum ad Default Source vel Default Stock"). Plura de structura MSI in Magento 2 in articulo inveniuntur "CELLA administratione ratio utendi CQRS et Event Sourcing. Design".
Ego configuratione defaltam utar et omnem informationem inventarii adiciam ad fontem default, quod involvitur in canali venditio cum pagina coniungitur cum codice base (Convenit ante finem copia - see store_website):
Post inventarium additis notitias producti in tabula admin, hanc imaginem accipis:
media
Cum "manually" imaginem rei per tabulam admin addito, notitiae in sequentibus tabulis scriptae sunt:
catalog_product_entity_media_gallery: subcriptio instrumentorum (imaginum et imaginum video);
catalog_product_entity_media_gallery_value: conjunctio instrumentorum ad products et showcases (localization);
catalog_product_entity_media_gallery_value_to_entityConiunctio instrumentorum ad res productas tantum (scilicet defaltam instrumentorum contentorum pro facto);
catalog_product_entity_varcharMunera quibus imago adhibetur, hic reponuntur;
et imagines ipsae in indicem servatae sunt ./pub/media/catalog/product/x/y/quibus x ΠΈ y β prima et secunda litterae imaginis nomen. Exempli gratia, file image.png ut salvus ./pub/media/catalog/product/i/m/image.pngita ut suggestum eo uti possit pro imagine, ex catalogo res gestas describens.
catalog_product_entity_media_gallery
Mandare missae in ./pub/media/catalog/product/ fasciculus instrumentorum (processus ponendi ipsum fasciculum in hoc articulo non tractatum);
Negotiorum instrumentorum tabellam coniungimus cum productum respondente sine aliquo storefront ligatum. Ubi prorsus haec notitia adhibetur, non liquet et cur ex antecedente tabula accedere non potest, sed haec tabula exstat et notitia ad eam scripta est, cum imago operis additur. Ut id est.
Fasciculus instrumentorum communicationis socialis adhiberi potest cum diversis muneribus (codice attributo respondente in parenthesi notatur);
Basis (image)
Parva imago (small_image)
Thumbnail (thumbnail)
Swatch Imago (swatch_image)
Scapus instrumentorum communicationis socialis est prorsus id quod accidit in catalog_product_entity_varchar. Codex ligaminis similis est in codice "Basic productum attributa".
Post imaginem addito producto in tabula admin hoc spectat:
genus
Tabulae principales continentur notitia ex categoria:
catalog_category_entity: Register of categories;
catalog_category_product: nexum inter genera et genera;
catalog_category_entity_*: EAV tribuunt valores;
Primo, in applicatione vacua Magento, subcriptio praedicamenti continet 2 categorias (Collumna nomina abbreviata; crt - created_at, upd - updated_at):
Categoria cum id=1 radice est catalogi totius Magento nec in tabula admin vel in pagina anteriori praesto est. Genus cum id = 2 (Default Categoria) Radix est genus principalis situs est copia principalis (Main Website Store) creatus est cum applicatio explicatur (cf. Admin / Stores / All Stores). Praeterea genus copiae ipsius radix etiam in fronte praesto non est, solum eius subcategoriae.
Cum thema huius articuli adhuc notitias de productis importat, in datorum categoriis creandis directum ingressum non adhibebo, sed generibus ab ipso Magento instructis (exempla et repositoria adhibebo). Directum ingressum in database adhibetur solum ad importatum productum cum categoria coniungendum (genus suo nomine aequatur, et id genus per adaptationem retinetur);
Products in admin panel post actiones faciendo additional:
et in fronte;
summary
Eadem copia productorum (10 frusta) ut in superiore articulo importatur saltem ordo magnitudinis velocior (1 secundi versus 10). Ut celerius accuratius aestimes, maior vis productorum opus est, pluribus centum, vel adhuc millibus amplius. Tamen, etiam cum tam parva notitiarum inputationis magnitudine, concludere possumus usum instrumentorum a Magento (exempla et repositoria) significantes esse (inculco -. tantum! tantum!) reducere celeritatem in qua notitia datorum ingreditur.
Quam ob rem aqua rigare contigit, et haec revelatio non est. Nunc tamen codicem habeo ludere et fortasse ad nonnullas conclusiones magis iucundas venio.