Π
Disclaimer: Magento ine yakagadzirira-yakagadzirwa mashandiro e
Iyo kodhi inokonzerwa nekunyora zvese zvinyorwa inogona kutariswa muMagento module "
- Zvigadzirwa zvinogadzirwa chete, kwete kuvandudzwa.
- Imwe imba yekuchengetera zvinhu
- Mazita echikwata chete anounzwa kunze kwenyika, pasina chimiro chawo
- Zvimiro zvedata zvinoenderana neshanduro 2.3
JSON yekuunza kunze chigadzirwa chimwe chete:
{
"sku": "MVA20D-UBV-3",
"name": "ΠΠ°Π³Π»ΡΡΠΊΠ° Π΄Π»Ρ ΠΏΠ»ΠΎΠΌΠ±ΠΈΡΠΎΠ²ΠΊΠΈ ΠΠ47-29 IEK",
"desc": "ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ ...",
"desc_short": "ΠΠ°Π³Π»ΡΡΠΊΠ° Π΄Π»Ρ ΠΏΠ»ΠΎΠΌΠ±ΠΈΡΠΎΠ²ΠΊΠΈ ΠΠ47-29 IEK ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ...",
"price": 5.00,
"qty": 25,
"categories": ["ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 1", "ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ 2"],
"image_path": "mva20d_ubv_3.png"
}
Hwirudzuro yematanho makuru ekuunza kunze
- kunyoreswa kwechigadzirwa pachacho
- kubatana pakati pechigadzirwa uye webhusaiti
- basic product attributes (EAV)
- Inventory data (huwandu hwechigadzirwa chiri mustock)
- midhiya (mifananidzo)
- kubatana nekatalogi zvikamu
Product Registration
Ruzivo rwechigadzirwa rwekutanga runogona kuwanikwa mukati catalog_product_entity
:
CREATE TABLE `catalog_product_entity` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity Id',
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attribute Set ID',
`type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
`sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
`has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Has Options',
`required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Required Options',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation Time',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
PRIMARY KEY (`entity_id`),
KEY `CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
KEY `CATALOG_PRODUCT_ENTITY_SKU` (`sku`)
)
Iwo mashoma ruzivo anodiwa kugadzira yekupinda mune yechigadzirwa registry ndeiyi:
attribute_set_id
sku
kuwedzera:
type_id
- kana tikasazvitsanangura, ipapo 'nyore' ichashandiswa
Kunyora zvakananga kune dhatabhesi, ini ndinoshandisa iyo DB adapta yeMagento pachayo:
function create($sku, $typeId, $attrSetId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity');
$bind = [
'sku' => $sku,
'type_id' => $typeId,
'attribute_set_id' => $attrSetId
];
$conn->insert($table, $bind);
$result = $conn->lastInsertId($table);
return $result;
}
Mushure mekunyoresa chigadzirwa ne catalog_product_entity
inova inoonekwa mune admin panel, mune chigadzirwa grid (Catalog/Zvigadzirwa).
Hukama pakati pechigadzirwa uye webhusaiti
Iko kushamwaridzana kwechigadzirwa nesaiti inosarudza kuti ndezvipi zvitoro uye zvinoratidzira chigadzirwa chichave chiripo kumberi.
function linkToWebsite($prodId, $websiteId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_website');
$bind = [
'product_id' => $prodId,
'website_id' => $websiteId
];
$conn->insert($table, $bind);
}
Basic chigadzirwa hunhu
Chigadzirwa chitsva ichi hachisati chave nezita kana tsananguro. Zvose izvi zvinoitwa kuburikidza
name
price
description
short_description
status
tax_class_id
url_key
visibility
Humwe hunhu hwakapatsanurwa hunowedzerwa kune chigadzirwa chakaita seichi (ruzivo rwekutora chiziviso uye rudzi rwechimiro kubva kukodhi yacho zvakasiiwa):
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);
}
}
Tichishandisa iyo hunhu kodhi, isu tinosarudza id yayo uye data rudzi (datetime
, decimal
, int
, text
, varchar
), wobva wanyora iyo data yehwindo rekutonga mutafura yakakodzera (store_id = 0
).
Mushure mekuwedzera hunhu huri pamusoro pachigadzirwa, unowana iyi pikicha mune admin panhizha:
Inventory data
Kutanga kubva kuvhezheni 2.3 muMagento, kune maviri anoenderana seti ematafura anopa chengetedzo yeruzivo rwezvinyorwa (huwandu hwechigadzirwa):
cataloginventory_*
: chimiro chekare;inventory_*
: chimiro chitsva (MSI - Multi Source Inventory);
Iwe unofanirwa kuwedzera data yezvinyorwa kune zvese zvimiro, nekuti chimiro chitsva hachisati chakazvimirira zvachose pane chekare (zvingangoitika kuti zve default
warehouse muchimiro chitsva tafura inobatanidzwa cataloginventory_stock_status
sezvo inventory_stock_1
).
bhuku remabhuku_
Kana tichiendesa Magneto 2.3 isu pakutanga tine 2 ekupinda mukati store_website
, iyo inoenderana nenzvimbo mbiri - administrative uye main client:
website_id|code |name |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
0|admin|Admin | 0| 0| 0|
1|base |Main Website| 0| 1| 1|
Tafura cataloginventory_stock
isu tinongopinda imwe chete:
stock_id|website_id|stock_name|
--------|----------|----------|
1| 0|Default |
Kureva, muchimiro chedu chekare pane imwe chete "dura" (stock
) uye yakabatana kune webhusaiti webhusaiti. Kuwedzera zvitsva kuburikidza ne admin panel sources
/stocks
muMSI (chimiro chitsva) hachikonzeri manyorerwo matsva mukati cataloginventory_stock
.
Inventory data nezve zvigadzirwa muchimiro chekare chinotanga kunyorwa mumatafura:
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_
Pakutanga, chimiro chitsva chekuchengeta data rezvinyorwa chine 1 "tsime"(inventory_source
):
source_code|name |enabled|description |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default |Default Source| 1|Default Source|0.000000| 0.000000|US |...|
uye mumwe"imba yekuchengetera"(inventory_stock
):
stock_id|name |
--------|-------------|
1|Default Stock|
Β«ChinhuΒ» inomiririra kuchengetwa kwenyama yezvigadzirwa (rekodhi rine maratidziro emuviri uye kero yekutumira). "Imba yekuchengetera"mubatanidzwa une musoro we "zvitubu" zvakawanda (inventory_source_stock_link
)
link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
1| 1|default | 1|
pamwero wekubatanidza kuchiteshi chekutengesa kunoitika (inventory_stock_sales_channel
)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Tichitarisa nechimiro chedata, mhando dzakasiyana dzekutengesa nzira dzinofungidzirwa, asi nekusarudzika chete kubatana "unganidza"-"Website"(chinongedzo chewebhusaiti chinotevera kodhi webhusaiti - base
).
Poshi "imba yekuchengetera"inogona kubatanidzwa kune dzakawanda"zvinyorwa"uye mumwe"tsime"- kune dzakawanda"matura"(vakawanda-kune-vakawanda hukama). Izvo zvinosiya ndezve default "tsime"Uye"imba yekuchengetera". Izvo hazvina kubatanidzwazve kune mamwe masangano (kugumira padanho rekodhi - kukanganisa "Haikwanise kuchengetedza chinongedzo chine chekuita neDefault Source kana Default Stock"). Mamwe ruzivo nezve MSI chimiro muMagento 2 inogona kuwanikwa muchinyorwa "
Ini ndichashandisa iyo yekumisikidza yekumisikidza uye nekuwedzera ruzivo rwese rwezvinyorwa kune sosi default
, iyo inobatanidzwa muchiteshi chekutengesa chakabatana newebsite ine code base
(inoenderana nechekumberi kwechitoro - ona store_website
):
function createNewItem($sku, $qty)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('inventory_source_item');
$bind = [
'source_code' => 'default',
'sku' => $sku,
'quantity' => $qty,
'status' => MagentoInventoryApiApiDataSourceItemInterface::STATUS_IN_STOCK
];
$conn->insert($table, $bind);
}
Mushure mekuwedzera data rekuverenga kune chigadzirwa mune admin panel, unowana uyu mufananidzo:
Media
Kana "nemaoko" uchiwedzera mufananidzo kune chigadzirwa kuburikidza nepaneru ye admin, ruzivo rwakakodzera rwunonyorwa pasi mumatafura anotevera:
catalog_product_entity_media_gallery
: media registry (mifananidzo uye vhidhiyo mafaera);catalog_product_entity_media_gallery_value
: kubatanidza midhiya kune zvigadzirwa uye showcases (localization);catalog_product_entity_media_gallery_value_to_entity
: kubatanidza midhiya kune zvigadzirwa chete (zvichida default midhiya zvemukati zvechigadzirwa);catalog_product_entity_varchar
: Mabasa ayo mufananidzo unoshandiswa akachengetwa pano;
uye iyo mifananidzo pachayo inochengetwa kune dhairekitori ./pub/media/catalog/product/x/y/
kupi x
ΠΈ y
- mabhii ekutanga neechipiri ezita refaira remufananidzo. Somuenzaniso, faira image.png
inofanira kuponeswa se ./pub/media/catalog/product/i/m/image.png
, kuitira kuti puratifomu inogona kuishandisa semufananidzo kana ichitsanangura zvigadzirwa kubva kukhathalogi.
catalog_product_entity_media_gallery
Register yakatumirwa mukati ./pub/media/catalog/product/
media faira (maitiro ekuisa iyo faira pachayo haana kukurukurwa munyaya ino):
function createMediaGallery($imgPathPrefixed)
{
$attrId = /* get attribute ID by attribute code 'media_gallery' */
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity_media_gallery');
$bind = [
'attribute_id' => $attrId,
'value' => $imgPathPrefixed,
/* 'image' or 'video' */
'media_type' => 'image',
'disabled' => false
];
$conn->insert($table, $bind);
$result = $conn->lastInsertId($table);
return $result;
}
Kana yakanyoreswa, faira idzva remidhiya rinopihwa chiziviso.
catalog_product_entity_media_gallery_value
Isu tinosanganisa iyo yakanyoreswa midhiya faira nechigadzirwa chinoenderana cheyekutanga chitoro chepamberi:
function createGalleryValue($mediaId, $prodId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity_media_gallery_value');
$bind = [
'value_id' => $mediaId,
/* use admin store view by default */
'store_id' => 0,
'entity_id' => $prodId,
'label' => null,
/* we have one only image */
'position' => 1,
'disabled' => false
];
$conn->insert($table, $bind);
}
catalog_product_entity_media_gallery_value_to_entity
Isu tinosanganisa iyo yakanyoreswa midhiya faira nechigadzirwa chinoenderana pasina kusungirirwa kune chero kumberi kwechitoro. Hazvisi pachena kuti ndeipi chaiyo data iyi inoshandiswa uye nei zvisingabviri kuwana data kubva patafura yapfuura, asi tafura iyi iripo uye data inonyorerwa iyo kana mufananidzo wakawedzerwa kune chigadzirwa. Saka ndizvozvo.
function createGalleryValueToEntity($mediaId, $prodId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_product_entity_media_gallery_value_to_entity');
$bind = [
'value_id' => $mediaId,
'entity_id' => $prodId
];
$conn->insert($table, $bind);
}
catalog_product_entity_varchar
Midhiya faira inogona kushandiswa nemabasa akasiyana (iyo inoenderana hunhu kodhi inoratidzwa mumaparentheses):
- Base (
image
) - Mufananidzo mudiki (
small_image
) - Thumbnail (
thumbnail
) - Swatch Mufananidzo (
swatch_image
)
Kubatanidza mabasa kune media faira ndizvo chaizvo zvinoitika mukati catalog_product_entity_varchar
. Kodhi yekusungirira yakafanana nekodhi iri mu "Basic chigadzirwa hunhu".
Mushure mekuwedzera mufananidzo kune chigadzirwa mune admin panel inoita seizvi:
Zvikwata
Matafura makuru ane data nechikamu:
catalog_category_entity
: rejista yezvikamu;catalog_category_product
: kubatana pakati pezvigadzirwa nemapoka;catalog_category_entity_*
: EAV hunhu hutsika;
Pakutanga, mune isina chinhu Magento application, iyo chikamu registry ine 2 zvikamu (Ndakapfupisa mazita emakoramu: crt
- created_at
, upd
- updated_at
):
entity_id|attribute_set_id|parent_id|crt|upd|path|position|level|children_count|
---------|----------------|---------|---|---|----|--------|-----|--------------|
1| 3| 0|...|...|1 | 0| 0| 1|
2| 3| 1|...|...|1/2 | 1| 1| 0|
Chikamu chine id = 1 ndiwo mudzi weMagento katalogi yese uye haiwanikwe mupaneru ye admin kana papeji yekutanga. Chikamu chine id=2 (Default Category) ndiyo midzi yemudzi wechitoro chikuru chesaiti (Main Website Store) yakagadzirwa kana application yaiswa (ona. Admin / Zvitoro / Zvese Zvitoro) Uyezve, iyo midzi yechitoro pachayo haiwanikwe kumberi, chete zvikamu zvayo.
Sezvo musoro wechinyorwa ichi uchiri kupinza dhata pane zvigadzirwa, ini handisi kuzoshandisa zvakananga kupinda mudhatabhesi pakugadzira zvikamu, asi ndichashandisa makirasi akapihwa naMagento pachayo (mienzaniso uye repositori). Kupinda kwakananga mudhatabhesi kunoshandiswa chete kubatanidza chigadzirwa chinotengeswa kunze kwenyika nechikamu (chikamu chinofananidzwa nezita rayo, uye chikamu id chinotorwa panguva yekufananidza):
function create($prodId, $catId)
{
/** @var MagentoFrameworkAppResourceConnection $this->resource */
/** @var MagentoFrameworkDBAdapterPdoMysql $conn */
$conn = $this->resource->getConnection();
$table = $this->resource->getTableName('catalog_category_product');
$bind = [
'category_id' => $catId,
'product_id' => $prodId,
];
$conn->insert($table, $bind);
}
Mushure mekuwedzera chinongedzo chechigadzirwa kumapoka "Chikamu 1" uye "Chikamu 2", zvinyorwa zvechigadzirwa mupaneru ye admin zvinotaridzika seizvi:
Zvimwe Zviitiko
Kana kupinza data kwapera, unofanirwa kupedzisa anotevera matanho ekuwedzera:
- data indexing: kufona mukoni
./bin/magento indexer:reindex
; - kuvandudza maURL ezvigadzirwa / mapoka: unogona kushandisa kuwedzera "
elgentos/regenerate-catalog-urls Β«
Zvigadzirwa mupaneru ye admin mushure mekuita zvimwe zviito:
uye mberi:
Summary
Iyo imwechete seti yezvigadzirwa (10 zvimedu) sezviri muchinyorwa chakapfuura zvinotengeswa kunze kwenyika kanenge kurongeka kwehukuru nekukurumidza (1 sekondi maringe negumi). Kuti unyatso kufungidzira kumhanya, unoda huwandu hukuru hwezvigadzirwa - mazana akati wandei, kana zviri nani asi zviuru. Nekudaro, kunyangwe neiyo diki saizi yedata rekuisa, tinogona kugumisa kuti kushandiswa kwezvishandiso zvakapihwa naMagento (mienzaniso uye repositori) kwakakosha (ini ndinosimbisa - zvikuru!) kukurumidzira kukura kwekushanda kunodiwa, asi panguva imwechete zvakanyanya (ini ndinosimbisa - zvikuru!) kuderedza kukurumidza iyo data inopinda mu database.
Nekuda kweizvozvo, mvura yakashanduka kuve yakanyorova uye ichi hachisi chizaruro. Nekudaro, ikozvino ndine kodhi yekutamba nayo uye pamwe ndiuye kune dzimwe dzinonakidza mhedziso.
Source: www.habr.com