Kokonaisuudessaan kehityksen/projektin kannalta on tärkeä ymmärtää, että vanhojen tietojen tuominen on työläämpää kuin ”vain” uuden kaupan perustaminen. Joka tapauksessa koko teema, eli asiakkaan front-end täytyy rakentaa päivityksessä uusiksi.
Magento 1.x:n tuki, tietoturvapäivitykset ja kehitys on ilmoitettu lopetettavaksi kesäkuussa 2020. Nyt onkin viimeistään alettava suunnittelemaan ja budjetoimaan päivitystä uuteen versioon, tai vastaavasti miettimään vaihdetaanko koko verkkokauppa-alusta. Tähän päätökseen saattaa vaikuttaa esimerkiksi se, että Magenton osti juuri Adobe.
Täytyy todeta, että tätä kirjoittaessani Magento 2.x on vielä erittäin buginen. Siinä missä melkein kaikki lisäosat ja core-toiminnot toimivat odotetusti Magento 1:n kanssa, niin Magento 2:n kanssa tilanne ei ole niin ruusuinen. Tämä johtuu siitä että ”minor”, eli 0.0.x versioiden välillä voi Magento 2:ssa olla melko suuriakin eroja. Suosittelen siis, että mikäli jostakin ostetaan ulkoista koodia, tulee se testata hyvin ennen jukaisemista.
Ensimmäinen asia mikä varmasti on monen mielessä: miten saadaan tuotua vanhat tuotteet, tilaukset ja myynnit vanhasta Magento 1.x järjestelmästä? Lisäksi varmasti haluttaisiin tuoda mahdollisten lisäosien sisältämää tietoa, kuten blogi-kirjoituksia tai vaikkapa karttatietoja. Osa onnistuu helposti ja osa vaatiikin yllättävän paljon työtä. Tämän kirjoituksen tarkoitus on nostaa tiettyjä kipukohtia ja huomioita, kun päivitystä suunnitellaan ja toteutetaan. Taustalla on kahden onnistuneen päivityksen tuoksinnassa syntyneitä havaintoja.
Data Migration
Magento 2:lle on tehty 1.x versioiden tietokannan tuomista vartan data migration tool, joka mahdollistaa tietojen tuonnin Magenton versioista 1.6.x, 1.7.x, 1.8.x, 1.9.x. Tämä työkalu toimii ainakin omien kokemusteni mukaan aika lailla sinne päin. Varmasti mikäli Magenton vanha versio on perustettu ja käytetty ilman että on luotu paljon omia attribuutteja tai useampia kauppoja, sekä tietokanta on uusi versiosta 1.9.x lähtien, niin voisi kyseinen työkalu voi toimia odotetusti. Kuitenkin usein kyseessä on useamman vuoden vanha tietokanta ja se aiheuttaa helposti ongelmia. Suurimmat ongelmat itselläni olivat kategorioiden kohdalla niin sanotussa multisite-asennuksessa. Multisite tarkoittaa asennusta, jossa yhdestä Magenton taustahallinnasta ajetaan useampaa verkkosivustoa ja tämä ominaisuus onkin yksi tärkeimmistä mitä Magento pystyy tarjoamaan.
Suosittelenkin tuote ja kategoria tietojen tuomista varten ennemmin hankkimaan kunnollisen export/import-työkalun. Itse tein lopulta niin, että toin migration toolilla Magento 2:n kehitysympäristöön tiedot vanhasta versiosta. Sitten exporttasin ja korjasin tiedot Excelissä. Ei kovinkaan tehokkaan kuuloinen tapa, mutta Magento 2:lla on aika suuria ongelmia käsitellä oikein Flat-tableita, joten kannattaa käyttää EAV-tauluja ainakin ennen kuin kaikki on valmista.
Lisäosat
Jokainen lisäosa joka on ollut Magento 1:ssä tulee aluksi asentaa Magento 2:lle. Data migration työkalun pitäisi löytää tarvittavat lisäosan tiedot asennuksesta ja tuoda tiedot sellaisenaan paikoilleen. Jokainen lisäosa kannattaa kartoittaa etukäteen sen alkuperäisen tekijän kanssa, jotta mahdollisilta ongelmilta vältytään.
Tässä tärkeimmät paikat, joita täytyy muokata data migration toolissa:
Määritellään tietokantojen yhteydet. Voit kommentoida pois mitä tietoja et haluat että migraatio työkalu yrittää tuoda vanhasta versiosta.
vendor/magento/data-migration-tool/etc/opensource-to-opensource/1.9.3.x/config.xml
Lisää tänne ne lisäosien classit, joita et haluat tuoda. Migration tool listaa nämä jos eivät ole oikein.
vendor/magento/data-migration-tool/etc/opensource-to-opensource/class-map.xml.dist
/* Esimerkiksi class-map.xml.dist lisätty */ <rename> <from>itactica_megamenu/menu_attribute_menustyle</from> <to></to> </rename> <rename> <from>itactica_megamenu/menu_attribute_columns</from> <to></to> </rename>
URL-osoitteiden ongelmat ja korjaaminen
Magento 2:n yksi rajoite, joka jää helposti huomioimatta on kategorioiden päällekkäisyys. Tämä ongelma ilmenee multisite asennuksissa. Eli kahdessa kaupassa ei saisi olla saman nimisiä kategorioita. Ongelma on kehitysyhteisöllä tiedossa. Kuitenkin näyttää siltä että päällekkäisyyksiä voi olla, ainakin tietyissä Magento 2:n versioissa. Tietenkin jos päällekkäisyyksiä päättetään luoda, niin tulee päivitysten yhteydessä olla erityisen tarkkana.
Magento 2 säilöö URL:ien ”ihmisten luettavat” polut tietokantaan taulussa ”url_rewrite”, lisäksi kategorioiden viittaukset ovat taulussa ”catalog_url_rewrite_product_category”. Näiden päivittäminen Magento 2:ssa on varsin hankalaa, sillä Magento 1:stä tuttua uudelleen indexöintiä Catalog URL Rewritesille ei enää ole.
Löysin päivitysprosessin aikana ainakin viisi työkalua, mutta ainoaksi järkeväksi osoittautui tämä: Magento2 Indexer UrlRewrite
Muutama lisäpointti
Tässä vielä pari lisäpointtia mitä kannattaa huomioida päivityksessa.
- Jos kaupassa on monta store viewiä, eli se on multisite, niin muokkaa kategorioita aina store view kohtaisesti. Magento 2 ei toimi niin sulavasti jos valitsee ”All stores”.
- Cloudflare tms. proxy DNS ei saa varmistettua yhteyttä kaikilla import/export työkaluilla. Eli kytke kehityksen ajaksi pois päältä.
- Älä käytä Flat tableja.
- Magento 2.2.x haara tukee PHP-versiota 7.1.x, mutta 2.3.x PHP-versiota 7.2.x..
Pari Excelin Visual Basic koodia helpottamaan taulukoissa
Makro, jolla voi kopioida samalta riviltä eri solusta valitun solun perään. (Kätevä esim. URL:ien muokkauksessa jos halutaan SKU URL:n perään)
Sub UrlSku() ' ' UrlSku Makro ' ' Dim skuString As String Dim newString As String skuString = ActiveCell.Offset(0, -15).Value ' Last value (-15) is the number of cells where it copies newString = Replace(skuString, "/", "") newString1 = Replace(newString, ",", "") newString2 = Replace(newString1, ".", "") ActiveCell.Value = ActiveCell.Value & "-" & newString2 ActiveCell.Offset(1, 0).Select End Sub
Koodi joka hajauttaa Excel-taulun useampaan tauluun. Kätevä esimerkiksi jos import-työkalu kestää kauan ja haluaa pilkkoa isomman tiedoston pienemmiksi.
Sub SplitData() ' First asks range, ie. $A$1:$FY$4100 (a1 cell to fy cell and 4100 rows) Dim WorkRng As Range Dim xRow As Range Dim SplitRow As Integer Dim xWs As Worksheet On Error Resume Next xTitleId = "KutoolsforExcel" Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) SplitRow = Application.InputBox("Split Row Num", xTitleId, 5, Type:=1) Set xWs = WorkRng.Parent Set xRow = WorkRng.Rows(1) Application.ScreenUpdating = False For i = 1 To WorkRng.Rows.Count Step SplitRow resizeCount = SplitRow If (WorkRng.Rows.Count - xRow.Row + 1) < SplitRow Then resizeCount = WorkRng.Rows.Count - xRow.Row + 1 xRow.Resize(resizeCount).Copy Application.Worksheets.Add after:=Application.Worksheets(Application.Worksheets.Count) Application.ActiveSheet.Range("A1").PasteSpecial Set xRow = xRow.Offset(SplitRow) Next Application.CutCopyMode = False Application.ScreenUpdating = True End Sub