Magento 2: manafatra vokatra mivantana ao anaty angon-drakitra
Π lahatsoratra teo aloha Nofaritako tamin'ny fomba mahazatra ny fizotran'ny fanafarana vokatra ao amin'ny Magento 2 - amin'ny alΓ lan'ny modely sy fitahirizana. Ny fomba mahazatra dia manana hafainganam-pandehan'ny fanodinana data tena ambany. Namokatra vokatra iray isan-tsegondra teo ho eo ny solosainako. Amin'ity tohiny ity dia mihevitra fomba hafa hanafatra vokatra aho - amin'ny fidirana mivantana amin'ny angon-drakitra, mandingana ny mekanika Magento 2 mahazatra (modely, orinasa, tahiry). Ny filaharan'ny dingana hanafatra vokatra dia azo ampifanarahana amin'ny fiteny fandaharana izay afaka miasa amin'ny MySQL.
Disclaimer: Magento dia manana fiasa efa vita ho an'ny fanafarana data ary azo inoana fa ho ampy ho anao izany. Na izany aza, raha mila fanaraha-maso feno kokoa amin'ny fizotran'ny fanafarana ianao, tsy voafetra amin'ny fanomanana rakitra CSV ho an'izay anananao, tongasoa eto amin'ny saka.
Ny kaody vokatry ny fanoratana lahatsoratra roa dia azo jerena ao amin'ny Module Magento "flancer32/mage2_ext_demo_import". Ireto misy fameperana vitsivitsy narahiko mba hanatsorana ny code module demo:
Ny vokatra dia noforonina fotsiny fa tsy nohavaozina.
Trano fanatobiana entana iray
Anaran'ny sokajy ihany no nafarana, tsy misy rafitra
Ny rafitra data dia mifanaraka amin'ny dikan-teny 2.3
Taorian'ny fisoratana anarana ny vokatra amin'ny catalog_product_entity dia hita ao amin'ny tontonana admin, ao amin'ny takelaka vokatra (Catalog/Products).
Fifandraisana eo amin'ny vokatra sy ny tranokala
Ny fikambanan'ny vokatra miaraka amin'ny tranokala dia mamaritra hoe aiza ny fivarotana sy fampisehoana ny vokatra ho hita eo anoloana.
Tsy mbola manana anarana na famaritana ny vokatra vao nisoratra anarana. Izany rehetra izany dia vita Ireo singa mifandraika amin'ny EAV. Ity ny lisitr'ireo toetra fototra ilaina amin'ny vokatra mba hanehoana tsara ny vokatra eo anoloana:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Misy toetra misaraka manampy amin'ny vokatra toy izao (ny antsipirian'ny fahazoana ny famantarana sy ny karazana toetra avy amin'ny kaody dia nesorina):
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);
}
}
Amin'ny fampiasana ny kaody toetra, dia mamaritra ny id sy ny karazana angona (datetime, decimal, int, text, varchar), dia soraty ao amin'ny latabatra mifanentana ny data ho an'ny varavarankely administratif (store_id = 0).
Aorian'ny fampidirana ireo toetra etsy ambony amin'ny vokatra dia azonao ity sary ity ao amin'ny tontonana admin:
Angon-drakitra momba ny fitahirizana
Manomboka amin'ny version 2.3 ao amin'ny Magento, misy tabilao roa mifanitsy izay manome fitehirizana vaovao momba ny fanisana (habetsan'ny vokatra):
cataloginventory_*: rafitra taloha;
inventory_*: rafitra vaovao (MSI - Multi Source Inventory);
Mila manampy angon-drakitra amin'ny rafitra roa ianao, satria ny rafitra vaovao dia mbola tsy mahaleo tena tanteraka amin'ny taloha (tena azo inoana fa ho an'ny default trano fanatobiana entana ao amin'ny rafitra vaovao misy latabatra cataloginventory_stock_status toy ny inventory_stock_1).
cataloginventory_
Rehefa mampiasa Magneto 2.3 isika dia manana fidirana 2 amin'ny voalohany store_website, izay mifanandrify amin'ny tranokala roa - mpanjifa administratif sy lehibe:
amin'ny ambaratonga misy ny fifandraisana amin'ny fantsona fivarotana (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Raha tsaraina amin'ny firafitry ny angon-drakitra, karazana fantsona fivarotana isan-karazany no raisina, fa ny fifandraisana ihany "tahiry"-"tranonkala"(Ny rohy mankany amin'ny tranokala dia manaraka ny kaody tranonkala - base).
iray"fivarotana"afaka mifandray amin'ny maro"loharanom-baovao"ary iray"loharano"- ho maromaro"trano fanatobiana entana"(fifandraisana betsaka amin'ny maro). Ny exceptions dia default "loharano"Ary"fivarotana". Tsy ampifandraisina amin'ny sampana hafa izy ireo (famerana amin'ny haavon'ny kaody - ny fahadisoana "Tsy afaka mitahiry rohy mifandraika amin'ny Loharano Default na Stock Default"). Ny antsipiriany bebe kokoa momba ny rafitra MSI ao amin'ny Magento 2 dia azo jerena ao amin'ny lahatsoratra "Rafitra fitantanana trano fanatobiana entana mampiasa CQRS sy Event Sourcing. Design".
Hampiasa ny fanamafisam-peo default aho ary hampiditra ny fampahalalana momba ny fitahirizana rehetra amin'ny loharano default, izay tafiditra ao amin'ny fantsona fivarotana mifandray amin'ny tranokala miaraka amin'ny code base (mifanaraka amin'ny faran'ny fivarotana - jereo store_website):
Aorian'ny fampidirana ny angon-drakitra momba ny vokatra ao amin'ny tontonana admin dia azonao ity sary ity:
Media
Rehefa "manampy" sary amin'ny vokatra amin'ny alΓ lan'ny tontonana admin dia voasoratra ao amin'ireto tabilao manaraka ireto ny fampahalalana mifandraika amin'izany:
catalog_product_entity_media_gallery: rejisitry ny haino aman-jery (sary sy rakitra video);
catalog_product_entity_media_gallery_value: fampifandraisana ny haino aman-jery amin'ny vokatra sy ny fampirantiana (localization);
catalog_product_entity_media_gallery_value_to_entity: fampifandraisana ny haino aman-jery amin'ny vokatra ihany (azo inoana fa ny votoatin'ny haino aman-jery ho an'ny vokatra);
catalog_product_entity_varchar: Tehirizina eto ny anjara asa ampiasana ny sary;
ary ny sary mihitsy no voatahiry ao amin'ny lahatahiry ./pub/media/catalog/product/x/y/izay x ΠΈ y - ny litera voalohany sy faharoa amin'ny anaran'ny rakitra sary. Ohatra, ny rakitra image.png tokony hovonjena ho ./pub/media/catalog/product/i/m/image.png, mba ahafahan'ny sehatra mampiasa azy ho sary rehefa mamaritra ny vokatra avy amin'ny katalaogy.
catalog_product_entity_media_gallery
Misoratra anarana ao ./pub/media/catalog/product/ rakitra media (tsy resahina ato amin'ity lahatsoratra ity ny fizotran'ny fametrahana ilay rakitra):
Ampifandraisinay amin'ny vokatra mifanaraka amin'izany ny rakitra media voasoratra anarana nefa tsy mifamatotra amin'ny fivarotana rehetra. Tsy fantatra mazava hoe aiza marina no ampiasana an'io data io ary nahoana no tsy azo atao ny miditra amin'ny angona avy amin'ny latabatra teo aloha, fa misy io tabilao io ary ny angon-drakitra dia voasoratra ao rehefa misy sary ampiana ny vokatra. Dia izay no izy.
Ny rakitra media dia azo ampiasaina miaraka amin'ny andraikitra samihafa (ny fehezan-dalΓ na mifandraika amin'izany dia aseho ao anaty fononteny):
fototra(image)
Sary kely (small_image)
Thumbnail (thumbnail)
Swatch Image (swatch_image)
Ny fampifandraisana ny anjara andraikitra amin'ny rakitra media dia tena mitranga ao catalog_product_entity_varchar. Ny kaody mifamatotra dia mitovy amin'ny kaody ao amin'ny "Toetra vokatra fototra".
Rehefa avy nampiditra sary tamin'ny vokatra tao amin'ny tontonana admin dia toa izao:
sokajy
Tabilao lehibe misy angona araka ny sokajy:
catalog_category_entity: rejisitry ny sokajy;
catalog_category_product: fifandraisana eo amin'ny vokatra sy ny sokajy;
catalog_category_entity_*: Sanda toetra EAV;
Tamin'ny voalohany, amin'ny fampiharana Magento tsy misy na inona na inona, ny rejisitra sokajy dia misy sokajy 2 (nohafoheziko ny anaran'ny tsanganana: crt - created_at, upd - updated_at):
Ny sokajy misy id=1 no fototry ny katalaogy Magento manontolo ary tsy hita ao amin'ny tontonana admin na eo amin'ny pejy voalohany. Sokajy misy id=2 (Default Sokajy) dia ny sokajy faka ho an'ny tranombarotra lehibe an'ny tranokala (Main Site Store) noforonina rehefa apetraka ny fampiharana (jereo. Admin / Fivarotana / Fivarotana rehetra). Ankoatr'izay, ny sokajy fototry ny magazay ihany koa dia tsy hita eo anoloana, fa ny zana-tsipìkany ihany.
Koa satria ny lohahevitr'ity lahatsoratra ity dia mbola manafatra data momba ny vokatra, tsy hampiasa ny fidirana mivantana amin'ny angon-drakitra aho rehefa mamorona sokajy, fa hampiasa ireo kilasy nomen'i Magento mihitsy (modely sy tahiry). Ny fidirana mivantana amin'ny angon-drakitra dia tsy ampiasaina afa-tsy hampifandray ny vokatra nafarana amin'ny sokajy iray (ny sokajy dia mifanandrify amin'ny anarany, ary ny id sokajy dia alaina mandritra ny fampifanarahana):
Vokatra ao amin'ny tontonana admin rehefa avy nanao hetsika fanampiny:
ary eo anoloana:
famintinana
Ny fitambaran'ny vokatra (seza 10) mitovy amin'ny ao amin'ny lahatsoratra teo aloha dia nafarana haingana kokoa (1 segondra versus 10). Mba hanombanana marina kokoa ny hafainganam-pandeha dia mila vokatra betsaka kokoa ianao - an-jatony, na an'arivony. Na izany aza, na dia amin'ny angon-drakitra fampidirana kely toy izany aza, dia afaka manatsoaka hevitra isika fa ny fampiasana ny fitaovana nomen'i Magento (modely sy repository) dia manan-danja (manantitrantitra aho - be!) manafaingana ny fivoaran'ny fampiasa ilaina, fa amin'ny fotoana iray ihany koa (tsindriako - be!) ahena ny hafainganam-pandehan'ny fidirana amin'ny angona.
Vokany, lena ny rano ary tsy fanambarana akory izany. Na izany aza, manana ny kaody hilalaovana aho izao ary mety ho tonga amin'ny fanatsoahan-kevitra mahaliana kokoa.