Hogyan lehet egyedi, vagy más webshopot WooCommercebe migrálni?

2021.02.27.

Hogyan lehet egyedi, vagy más webshopot  WooCommercebe migrálni?

Egyáltalán, hogy fordulhat elő, hogy valaki CMS-re akar cserélni egy egyedi fejlesztést? (amikor tudjuk jól, hogy annál jobb nem létezik). Jópáran belefutnak az elején, hogy valójában nem a vállalkozás akkori igényeinek legmegfelelőbb rendszert kezdik el használni és csak később derül ki, hogy váltani kell, vagy szintet kell lépni. Ezzel önmagában nincsen gond, minden vállalkozás életében vannak fejlődési szakaszok, amikor a szolgáltatásaikat bővíteni szeretnék, korábbi rendszereiket pedig frissíteni.

Alapjáraton az egyedi webshop fejlesztése a legjobb megoldás arra, hogy pontosan olyan webshopja legyen a cégnek, amilyet akar. Csakhogy KKV szinten egy ilyen rendszert nagyon nehéz folyamatosan adminisztrálni, karbantartani, fejleszteni, marketingezni, reagálni a piac változásaira. Értsd, a 3 fős cipő manufaktúra 200 termékkel nem az a kategória, mint az Emag, vagy az Extrém Digital, ahol 354 fő dolgozik, ebből 20 biztosan csak a weboldalt simogatja. Tehát teljesen érthető, hogy a kisebb vállalkozások olyan költséghatékony és kész megoldást keresnek, amivel viszonylag gyorsan, problémamentesen lehet online értékesíteni, akkor is, ha ez némi kompromisszummal jár.

Tegyük fel, hogy a cég mostani webshopmotorja valamilyen egyedi fejlesztés, vagy más tartalomkezelő rendszer és szeretnék azt WooCommerce-be migrálni (átköltöztetni). Azonnal adja magát, hogy biztosan van erre valami kész bővítmény, amivel egy kattintással be tudjuk importálni az összes terméket, kategóriát, képet, metainformációt és minden egyebet. De sajnos ki kell, hogy ábrándítsalak, több fizetős megoldás kipróbáltam már, de egyik sem volt elég hatékony.

Mikor érdemes automatizálni a migrálást?

2-300 termékig inkább tegyél fel mindent kézzel. Komolyan. Mire összelegózod a CSV import fájlt a WooCommercehez, addig 5x végzel a hagyományos copy/paste módszerrel. 2-300 termék egyáltalán nem sok, ha 3-5 perc alatt bemásolsz mindent 1 termékről, maximum 2 nap alatt végzel az összessel, míg a megfelelő termék import többtíz körös művelet, nagyon sok sikertelen próbálkozással. Ezres mennyiségben már inkább az importálás lenne a legmegfelelőbb megoldás, ez kevesebb hibalehetőséggel jár és gyorsabban végzel.

Hogyan álljak neki a termék importnak?

Első lépés, hogy értelmezni kell a kapott adatbázist. Ne gondold, hogy a korábbi fejlesztő majd segítőkészen beavat mindenbe, hogyan épül fel a struktúra, milyen táblákban vannak tárolva a termékek fontosabb tulajdonságai és így tovább. Jellemzően semmi infót nem kapsz és ha szerencséd van legalább nem fog hátráltatni az előző / sértődött / eltűnt fejlesztő, akinek a munkája most lecserélésre kerül.

A cél az, hogy egy WooCommerce struktúrájának megfelelő import fájlt csinálj CSV formátumban a termékadatokból. A termékadatok általában több különböző táblában vannak tárolva, amik kulcsokkal kommunikálnak. Adatbázis ismeret nem árt ehhez, tehát vaktában ne kezdj el gányolni a phpMyAdmin-ban, mert rosszul fog elsülni. Legyen biztonsági mentésed az eredeti webshop adatbázisáról, anélkül neki se állj.

Hogyan épül fel a WooCommerce termékimport fájl?

Mint a legtöbb import fájl ez is CSV (pontosvesszővel elválasztott) formátum, ami egy tagolt szövegfájl, amit táblázatos adatokból lehet generálni. Így néz ki a WooCommerce import fájl minta és a dokumentáció az egyes oszlopokhoz. Természetesen nem kell mindent kitölteni azonnal, több körben is elvégezhető az egyes adatok importálása. A WooCommerce biztosítja azt a lehetőséget, hogy oszlopontként importálj adatokat a termékről.

Az első körben csak azt importáld be, amit a legegyszerűbben ki tudsz nyerni a korábbi rendszer adatbázisából.

  • cikkszám, vagy ID
  • név
  • leírás
  • ár
  • kategória
  • képek

Ha nincs a termékeknek cikkszáma, akkor érdemes a régi ID-t cikkszámkén használni amíg dolgozol az oldalon, így több lépésben lehet importálni a termékek tulajdonságait, ha szükséges. A több lépéses importálás lényege, hogy a termékek tulajdonságait külön-külön importáljuk, így biztosítva azt, hogy az adatok folyamatos ellenőrzés mellett kerülnek a rendszerbe.

Google Spreadsheet a legjobb barátod

Mivel szerkeszd az import fájlt? Excel helyett jobb választás a Google Dirve táblázatkezelője, mert ebben biztos, hogy nem lesz a gondod a karakterkódolással és két kattintás a megfelelő CSV formátum mentése.

Ebben a legkönnyebb összerendezni az importfájlhoz szükséges adatokat. Érdemes munkalapokon dolgozni, ahova bemásolod a régi adatbázis szükséges tábláit külön fülekre. Ahhoz, hogy be tudd importálni a táblákat a régi adatbázisból ki kell exportálni őket CSV for MS Excel formátumban (tehát nem sql-ben). Ezt a phpMyAdmin-ból tudod megtenni.

Importáláshoz elég ha feltöltöd a fájlt a Drivera. File > Import > Upload, majd a beállítod az alábbi szabályokat.

Ha meg van minden szükséges tábla a régi adatbázisból, akkor el lehet kezdeni feltölteni az import sablont oszlopok mentén. Odáig lesz egyszerű, amíg nem kell több táblából kikeresni az adatokat. Ha idegenkulcsok mentén kell keresni az egyes táblákban, akkor meg kell keresni a termék ID-t, hogy megkapd a keresett értéket. (Például: A termékek és tulajdonságok relációi egy közös táblában, míg a tulajdonságok megnevezései egy másik táblában vannak.) Ezt a legegyszerűbben FKERES függvénnyel lehet megtenni, ami függőlegesen keres egy táblázatban és vissza adja azt a találatot, ahányadik oszlopból szeretnéd az értéket megkapni.

=VLOOKUP($A1,'products_info'!$A$1:$S$2000,3,FALSE)

Az A1 oszlopban lévő értéket keresem a products_info lapon belül az A1:S2000 táblázatban. Eredményül 3 oszlopban lévő értéket szeretném pontos egyezéssel (false).

Ily módon fel tudod tölteni az import sablon azon részeit is, amit nem lehet sima copy/paste módszerel feltölteni.

Tömbök és Objektumok

Mi van, ha több elem tartozik egy ID-hoz nem csak egy. Ilyenek lehetnek például a termék képek, vagy az upsell / cross-sell termék összekapcsolások, amikből több is lehet egy terméknél. Ilyenkor valami hasonlót várunk:

termék idupsell sku
45PR15, PR89, PR03
42PR12, PR38

De, ami kijön a régi adatbázisból, az nem így néz ki, hanem valahogy így:

termék idupsell sku
42PR12
42PR38
45PR15
45PR89
45PR03

Ezeket az adatokat kell olyan formára hozni, minta az első táblázat. A legfőbb probléma ezzel, hogy nem tudunk rá megadni Excel függvényt, mert más az adatok struktúrája. (Persze meglehetne oldani, de fogadok ilyen szinten Te sem használod az Excelt, ahogy én sem). Ezért szoktam írni rá egy egyszerű PHP scriptet, ami olyan táblázatos formára hozza az adatokat, amit be tudok másolni a Google táblázatba. A meglévő adatokból csinálok tömböket. Erre is van online eszköz, csak be kell másolni ide a táblázat megfelelő oszlopait: https://tableconvert.com/

Majd az alábbi ciklusban legenerálom a táblázatot a tömbökből. A lényege, hogy megnézem hány egyedi termék ID van, ennyi sorom lesz. Majd kigyűjtöm a megfelelő értékeket az ID-k hoz. Hasonló az FKERES-hez, csak itt egy változót keresünk egy tömbben és ahhoz tartozó összes értéket kiíratjuk egy cellába.

<?php 
$ids = array_unique($productids); // termék ID-k
echo '<table border="1">';
foreach ($ids as $id){ 
    echo "<tr><td>'" . $id."</td><td>"; // sor és termék ID kiirása
        foreach ($ups as $up){ // hozzátartozó értékek kiírása
            if($up["val0"] == $id){
                echo $up["val1"] . ',';
            } 
        } 
    echo '</td></tr>';
} 
echo '</table>';
?>

Az így generált HTML táblázatot szinte bárhova be lehet másolni copy/paste-el, a szoftverek felismerik és megtartják a cellákat, tehát az importsablonba is be lehet illeszteni.

Szövegcsere műveletek

Mi van, ha valamihez nincs találat? Akkor kapsz #N/A értéket a cellákba, ha az FKERES nem ad találatot a keresett ID-ra, vagy, ha az adtázásban eleve nem volt ott semmi (ez NULL is lehet). Ezeket nyilván nem szabad importálni, az ilyen cellák az import sablonban legyenek üresek. Ezeket keresés és csere megoldással tudod ki szedni.

Serialized Data

A szerializált adatokat sok helyen használja a WordPress, ilyen formában tárolja például a widgetek, vagy a képgalériák tartalmát, beállításait. Tulajdonképpen ez nem nem más, mint egy JSON objektum, ami valahogy így szokott kinézni:

a: 1: {
     i: 0;a: 3: {
         s: 4: "name";s: 0: "";s: 7: "default";b: 1;s: 9: "documents";a: 3: {
             i: 0;a: 2: {
                 s: 5: "label";s: 6: "doksi1";s: 13: "file_location";s: 51: "https://domained.hu/wp-content/uploads/321.jpg";
             }
             i: 1;a: 2: {
                 s: 5: "label";s: 6: "doksi2";s: 13: "file_location";s: 61: "https://domained.hu/wp-content/uploads/Pamut-szatyor.jpg";
             }
             i: 2;a: 2: {
                 s: 5: "label";s: 5: "doks3";s: 13: "file_location";s: 54: "https://domained.hu/wp-content/uploads/7834-1.jpg";
             }
         }
     }
 }

A WooCommerce a termékek azon tulajdonságait tárolja így, amik valamilyen bővítményhez kapcsolódnak, pl csatolt dokumentumok, egyéb egyedi terméktulajdonságok, amiket majd bővítmény fog kezelni. Az a nagy szívás ezzel, hogy a hagyományos adatbáziscellákban tárolt adatokat, először ilyen szerializált formára kell hozni, hogy importálható legyen meta_field ként a WooCommercbe. Végső soron tehát kell egy táblázat ehhez is, aminek egyik cellájában a cikkszámok (vagy ID-k), a másikban pedig ezek a szerializált adatok vannak.

Cikkszám_meta_field_name
KC1124a: 1: { i: 0;a: 3: { s: 4: “name”;s: 0: “”;s: 7: “default”;b: 1;s: 9: “documents”;a: 3: { i: 0;a: 2: { s: 5: “label”;s: 6: “doksi1”;s: 13: “file_location”;s: 51: “https://domained.hu/wp-content/uploads/321.jpg”; } i: 1;a: 2: { s: 5: “label”;s: 6: “doksi2”;s: 13: “file_location”;s: 61: “https://domained.hu/wp-content/uploads/Pamut-szatyor.jpg”; } i: 2;a: 2: { s: 5: “label”;s: 5: “doks3”;s: 13: “file_location”;s: 54: “https://domained.hu/wp-content/uploads/7834-1.jpg”; }}}}
KC1133a: 1: { i: 0;a: 3: { s: 4: “name”;s: 0: “”;s: 7: “default”;b: 1;s: 9: “documents”;a: 3: { i: 0;a: 2: { s: 5: “label”;s: 6: “doksi1”;s: 13: “file_location”;s: 51: “https://domained.hu/wp-content/uploads/321.jpg”; } i: 1;a: 2: { s: 5: “label”;s: 6: “doksi2”;s: 13: “file_location”;s: 61: “https://domained.hu/wp-content/uploads/Pamut-szatyor.jpg”; } i: 2;a: 2: { s: 5: “label”;s: 5: “doks3”;s: 13: “file_location”;s: 54: “https://domained.hu/wp-content/uploads/7834-1.jpg”; }}}}
KC1134a: 1: { i: 0;a: 3: { s: 4: “name”;s: 0: “”;s: 7: “default”;b: 1;s: 9: “documents”;a: 3: { i: 0;a: 2: { s: 5: “label”;s: 6: “doksi1”;s: 13: “file_location”;s: 51: “https://domained.hu/wp-content/uploads/321.jpg”; } i: 1;a: 2: { s: 5: “label”;s: 6: “doksi2”;s: 13: “file_location”;s: 61: “https://domained.hu/wp-content/uploads/Pamut-szatyor.jpg”; } i: 2;a: 2: { s: 5: “label”;s: 5: “doks3”;s: 13: “file_location”;s: 54: “https://domained.hu/wp-content/uploads/7834-1.jpg”; }}}}

A WooCommerce-be bármilyen egyedi meta_field-et be lehet importálni, akkor is, ha az jelenleg nincs használatban. Arra kell csak ügyelned, hogy pontosan azt a megnevezést használd, amit a bővítmény használ ezen adatok kezelésére. Ezt úgy lehet a legegyszerűbben kideríteni, ha egy termeknél beállítod a bővítményt (pl dokumentum kezelő) és megnézed a phpMyAdmin-ban, hogy milyen struktúrában mentődnek az adatok.

Hogyan lehet ilyen szerializált adatokat csinálni?

Szerencsére van rá PHP függvény, a serialize(), amivel tudsz tömböt ilyen sztring formára alakítani. Ehhez meg kell tervezni magát a tömböt, aminek a szerializációja pontosan olyan formátumot ad vissza, amit a bővítmény vár. Gyerek játék .

Elsőre nem fog sikerülni

De másodikra se, meg harmadikra se. Viszonylag sokszor meg kell próbálni, amíg el tudod érni, hogy minden adat a helyén legyen. Ha nem sikerül mindent beimportálni, akkor csinálj meg annyit, amennyit hiba nélkül megtudsz. Nagyon sok tulajdonság megadható később a szerkesztőből is, ha megveszed például a Bulk Editor PRO-t. Számíts rá, hogy lesz adatvesztésed akkor is, ha elsőre úgy tűnik minden tökéletesen importálódott. Egy-két termékkép elveszik, vagy rossz helyre kerül, ezeket kézzel javítod az importálás után.

3500 terméket importáltam be sikeresen ezekkel a módszerekkel, minimális adatvesztéssel. A termékekhez összesen 560 pdf dokumentum volt csatolva, amit szintén importtal oldottam meg. Kitartás!

A programozás alapjai

Ingyenes leckesorozat!

Ahhoz, hogy később kód szinten is meg tudj valósítani összetettebb frontend igényeket, tisztában kell lenned a programozás alapfogalmaival. Ebben a leckesorozatban bevezetlek a programozás alapismereteibe teljesen programfüggetlenül.

Megismerkedhetsz az algoritmusokkal, ciklusokkal, logikai műveletekkel és adattípusokkal, emellett gyakorlati feladatokat is kapsz minden témakörhöz. Mindezt egy kényelmes online oktatófelületen. Regisztrálj és kezdd el még ma!

szám, kisbetű, nagybetű, legalább 8 karakter

Elolvastam és elfogadom az Adatvédelmi Nyilatkozatot

Ingyenes leckesorozat!