Magento 1.x päivittäminen 2.x -versioon

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

 

 


Kommentoi kirjoitusta