Π
chandalama: Magento ali ndi magwiridwe antchito okonzeka
Khodi yobwera chifukwa cholemba zolemba zonse ziwiri imatha kuwonedwa mu gawo la Magento "
- Zogulitsa zimangopangidwa, osati kusinthidwa.
- Malo amodzi
- Mayina amagulu okha ndi omwe amatumizidwa kunja, popanda kapangidwe kake
- Mapangidwe a data amagwirizana ndi mtundu 2.3
JSON potumiza kunja chinthu chimodzi:
{
"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"
}
Chidule cha magawo akulu otengera kunja
- kalembera wa mankhwala palokha
- kugwirizana pakati pa malonda ndi webusaitiyi
- Makhalidwe azinthu zoyambira (EAV)
- Inventory data (kuchuluka kwa zinthu zomwe zili mgulu)
- media (zithunzi)
- kugwirizana ndi magulu a catalog
Kulembetsa Katundu
Zambiri zamalonda zitha kupezeka mu 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`)
)
Zomwe zimafunikira kuti mupange cholowa mu kaundula wazinthu ndi:
attribute_set_id
sku
zowonjezera:
type_id
- ngati sitifotokoza, ndiye kuti 'zosavuta' zidzagwiritsidwa ntchito
Kulemba mwachindunji ku database, ndimagwiritsa ntchito DB adapter ya Magento palokha:
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;
}
Pambuyo kulembetsa mankhwala ndi catalog_product_entity
zimawonekera mu gulu la admin, mu gridi yazinthu (Catalog/Zogulitsa).
Mgwirizano pakati pa malonda ndi webusaitiyi
Kugwirizana kwa malonda ndi malowa kumatsimikizira kuti ndi masitolo ndi mawonetsedwe ati omwe angakhalepo kutsogolo.
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);
}
Makhalidwe azinthu zoyambira
Chogulitsa chatsopanocho sichinatchulidwe kapena kulongosola. Zonsezi zachitika
name
price
description
short_description
status
tax_class_id
url_key
visibility
Lingaliro lapadera limawonjezedwa ku chinthu chonga ichi (zambiri zopezera chizindikiritso ndi mtundu wa mawonekedwe ake zasiyidwa):
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);
}
}
Pogwiritsa ntchito chizindikiro, timazindikira id ndi mtundu wa data (datetime
, decimal
, int
, text
, varchar
), kenako lembani zomwe zili pawindo loyang'anira patebulo loyenera (store_id = 0
).
Mutawonjezera zomwe zili pamwambapa pazogulitsa, mumapeza chithunzichi pagulu la admin:
Deta yazinthu
Kuyambira pa mtundu wa 2.3 ku Magento, pali matebulo awiri ofanana omwe amapereka kusungirako zidziwitso (kuchuluka kwazinthu):
cataloginventory_*
: kapangidwe kakale;inventory_*
: dongosolo latsopano (MSI - Multi Source Inventory);
Muyenera kuwonjezera deta yazinthu kuzinthu zonse ziwiri, chifukwa dongosolo latsopano silinadziyimire kwathunthu pa yakale (ndizotheka kuti kwa default
nyumba yosungiramo katundu mumpangidwe watsopano tebulo likukhudzidwa cataloginventory_stock_status
monga inventory_stock_1
).
mndandanda wa mabuku_
Potumiza Magneto 2.3 timakhala ndi zolowa ziwiri store_website
, yomwe ikufanana ndi masamba awiri - oyang'anira ndi kasitomala wamkulu:
website_id|code |name |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
0|admin|Admin | 0| 0| 0|
1|base |Main Website| 0| 1| 1|
Table cataloginventory_stock
tili ndi cholowa chimodzi chokha:
stock_id|website_id|stock_name|
--------|----------|----------|
1| 0|Default |
Ndiko kuti, m'nyumba yathu yakale muli "nyumba yosungiramo zinthu" imodzi yokha (stock
) ndipo imalumikizidwa ndi webusayiti yoyang'anira. Kuwonjezera zatsopano kudzera pa gulu la admin sources
/stocks
mu MSI (kapangidwe katsopano) sizimalowetsamo zatsopano cataloginventory_stock
.
Zambiri zazinthu zomwe zili mumpangidwe wakale zimalembedwa m'matebulo:
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);
}
kufufuza_
Poyambirira, mawonekedwe atsopano osungiramo zinthu zomwe zili ndi 1 ".gwero"(inventory_source
):
source_code|name |enabled|description |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default |Default Source| 1|Default Source|0.000000| 0.000000|US |...|
ndi chimodzi"nyumba yosungiramo katundu"(inventory_stock
):
stock_id|name |
--------|-------------|
1|Default Stock|
Β«KuchokeraΒ» imayimira kusungidwa kwazinthu (zolembazo zili ndi makonzedwe akuthupi ndi adilesi yamakalata). "Nyumba yosungiramo katundu"ndi mgwirizano womveka wa "magwero" angapo (inventory_source_stock_link
)
link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
1| 1|default | 1|
pamlingo womwe kulumikizana ndi njira yogulitsa kumachitika (inventory_stock_sales_channel
)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Kutengera mawonekedwe a data, mitundu yosiyanasiyana ya njira zogulitsira imaganiziridwa, koma mwachisawawa, kulumikizana kokha "katundu"-"webusaiti"(ulalo wa webusayiti umatsata tsamba lawebusayiti - base
).
Mmodzi"nyumba yosungiramo katundu"ikhoza kugwirizanitsidwa ndi angapo"magwero"ndi chimodzi"gwero"- kwa angapo"nkhokwe"(maubwenzi ambiri ndi ambiri). Zosiyana ndizosasintha "gwero"Ndipo"nyumba yosungiramo katundu". Sakulumikizidwanso ndi mabungwe ena (zoletsa pamlingo wa code - cholakwika "Sitingathe kusunga ulalo wokhudzana ndi Default Source kapena Default Stock"). Zambiri za kapangidwe ka MSI ku Magento 2 zitha kupezeka m'nkhani "
Ndidzagwiritsa ntchito makonzedwe osasinthika ndikuwonjezera zonse zosungira ku gwero default
, yomwe ikukhudzidwa ndi njira yogulitsa yogwirizana ndi webusaitiyi ndi code base
(zofanana ndi kumapeto kwa sitolo - onani 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);
}
Pambuyo powonjezera zomwe zili pagulu la admin, mumapeza chithunzi ichi:
Media
Mukawonjezera "pamanja" chithunzi ku chinthu kudzera pagulu la admin, mfundo zoyenera zimalembedwa m'matebulo otsatirawa:
catalog_product_entity_media_gallery
: registry media (zithunzi ndi mafayilo amakanema);catalog_product_entity_media_gallery_value
: kulumikiza media kuzinthu ndi mawonetsero (kukhazikika);catalog_product_entity_media_gallery_value_to_entity
: kulumikiza media kuzinthu zokhazokha (mwinamwake zosasinthika zamtundu wazinthu);catalog_product_entity_varchar
: Maudindo omwe chithunzicho chimagwiritsidwa ntchito amasungidwa apa;
ndipo zithunzizo zimasungidwa ku chikwatu ./pub/media/catalog/product/x/y/
kumene x
ΠΈ y
- chilembo choyamba ndi chachiwiri cha dzina la fayilo ya fano. Mwachitsanzo, fayilo image.png
ayenera kupulumutsidwa monga ./pub/media/catalog/product/i/m/image.png
, kotero kuti nsanja ikhoza kuigwiritsa ntchito ngati chithunzi pofotokoza zinthu zochokera m'kabukhu.
catalog_product_entity_media_gallery
Register yatumizidwa ./pub/media/catalog/product/
media file (njira yoyika fayilo palokha siyikukambidwa m'nkhaniyi):
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;
}
Mukalembetsedwa, fayilo yatsopano yapa media imapatsidwa chizindikiritso.
catalog_product_entity_media_gallery_value
Timayanjanitsa fayilo yolembetsedwa yolembetsedwa ndi chinthu chofananira ndi malo osungirako zinthu zakale:
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
Timagwirizanitsa fayilo ya media yolembetsedwa ndi chinthu chofananira popanda kumangidwa ndi malo ogulitsira. Sizidziwikiratu komwe detayi imagwiritsidwira ntchito komanso chifukwa chake sizingatheke kupeza deta kuchokera patebulo lapitalo, koma tebulo ili liripo ndipo deta imalembedwa pamene chithunzi chikuwonjezeredwa ku mankhwala. Kotero ndi zimenezo.
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
Fayilo yapa media ikhoza kugwiritsidwa ntchito ndi maudindo osiyanasiyana (chithunzi chofananira chikuwonetsedwa m'makolo):
- Base (
image
) - Chithunzi chaching'ono (
small_image
) - Thumbnail (
thumbnail
) - Swatch Image (
swatch_image
)
Kulumikiza maudindo ku fayilo ya media ndizomwe zimachitika catalog_product_entity_varchar
. Khodi yomanga ikufanana ndi code yomwe ili mu "Makhalidwe azinthu zoyambira".
Pambuyo powonjezera chithunzi pazogulitsa pagulu la admin zikuwoneka motere:
Zigawo
Matebulo akulu okhala ndi data potengera gulu:
catalog_category_entity
: kaundula wa magulu;catalog_category_product
: kugwirizana pakati pa malonda ndi magulu;catalog_category_entity_*
: Makhalidwe a EAV;
Poyambirira, mu pulogalamu yopanda kanthu ya Magento, zolembera zamagulu zili ndi magulu a 2 (Ndinafupikitsa mayina amzawo: 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|
Gulu lomwe lili ndi id=1 ndiye muzu wa kabukhu lonse la Magento ndipo silipezeka pagulu la admin kapena patsamba loyamba. Gulu lokhala ndi id=2 (Gulu Losasinthika) ndiye gulu la mizu ya sitolo yayikulu ya tsamba lalikulu (Main Website Store) idapangidwa pomwe pulogalamuyo itumizidwa (onani. Admin / Masitolo / Masitolo Onse). Kuphatikiza apo, gulu la mizu ya sitolo palokha silipezekanso kutsogolo, ndi magawo ake ang'onoang'ono.
Popeza mutu wa nkhaniyi ukutumizabe deta pazinthu zamalonda, sindidzagwiritsa ntchito kulowetsa mwachindunji muzosungirako popanga magulu, koma ndidzagwiritsa ntchito makalasi operekedwa ndi Magento mwiniwake (zitsanzo ndi nkhokwe). Kulowa mwachindunji mu nkhokwe kumagwiritsidwa ntchito kungogwirizanitsa zinthu zomwe zatumizidwa ndi gulu (gululo likugwirizana ndi dzina lake, ndipo id ya gulu imatengedwanso panthawi yofananira):
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);
}
Mukawonjezera ulalo wazinthu kumagulu a "Gawo 1" ndi "Gawo 2", tsatanetsatane wazogulitsa pagulu la admin zikuwoneka motere:
Zochita Zowonjezera
Kutumiza kwa data kukamalizidwa, muyenera kuchita izi:
- data indexing: imbani mu console
./bin/magento indexer:reindex
; - kukonzanso ma URL azinthu / magulu: mutha kugwiritsa ntchito kuwonjezera "
elgentos/regenerate-catalog-urls Β«
Zogulitsa mu gulu la admin mutachita zina zowonjezera:
ndi kutsogolo:
Chidule
Zogulitsa zomwezo (zidutswa 10) monga momwe zilili m'nkhani yapitayi zimatumizidwa kunja osachepera dongosolo la kukula mofulumira (1 sekondi motsutsana ndi 10). Kuti muwerenge molondola liwiro, mufunika kuchuluka kwazinthu - mazana angapo, kapena bwino masauzande. Komabe, ngakhale ndi chiwerengero chochepa chothandizira, tikhoza kunena kuti kugwiritsa ntchito zida zoperekedwa ndi Magento (zitsanzo ndi zosungirako) ndizofunikira (ndikutsindika - kwambiri!) kufulumizitsa kukula kwa magwiridwe antchito, koma nthawi yomweyo kwambiri (ndikutsindika - kwambiri!) kuchepetsa liwiro lomwe deta imalowa mu database.
Zotsatira zake, madziwo adakhala onyowa ndipo izi sizinali vumbulutso. Komabe, tsopano ndili ndi code yoti ndisewere nayo ndipo mwina ndifika pamalingaliro ena osangalatsa.
Source: www.habr.com