Preverjanje če artikel obstaja ob prvem XML uvozu
6 naročnikov
6 naročnikov
Delamo modul za avtomatsko uvažanje oziroma importanje artiklov v magento preko XML-ja dobavitelja. Glede na to pa da ima naša trgovina že veliko dodanih izdelkov, tudi veliko od tega dobavitelja čigar je XML, se nam pojavlja naslednje vprašanje:
Kako preveriti ob prvem avtomatiziranem uvozu če artikel že obstaja v trgovini ali ne?
- Po imenu artikla je težko preverjati saj se imena ne popolnoma ujemajo. Namreč lastnik trgovine ko je dodajal artikle je včasih kakšno besedo dodal ali spremenil v imenu artikla.
- Problem je tudi ker so nekateri isti artikli bili dodani preko spiska drugega dobavitelja, zato je lahko ime tudi nekoliko drugačno.
- Nekoliko se nam je zastevilo in smo želeli preverjati preko unikatnih imen modela vsakega artikla. Samo tukaj se pojavi težava, da je težko iz imena artikla izluščiti nek model. Ker recimo en od težjih primerov je tak. Ime "LG GC-W141 BXG VINSKA VITRINA" , model pa je vse to "GC-W141 BXG" , namreč ta BXG predstavlja barvo.
Veliko je enih komplikacij in me zanima če se je že kdo srečal s podobnim problemom pa kako ga je potem rešil?
Hvala.
10 odgovorov
Tole bi rabil najpej dati v neko svojo "bazo", kjer bi imel shranjena samo različne artikle. In če je artikel različen od že vpisanih ga dodaš notr, nato pa sam na novo dodane dodajaš v magento. Sam sem ta problem nekje drugje rešil tako da se stvar ujema vsaj v določenem številu črk. Sam še vseno to ni 100% rešitev. A ne dobiš nobene ID cifre po kateri bi preverjal če ta izdelek že obstaja ?
Ima ta dobavitelj kako kodo artikla oz. nek ID po katerem ga ima v svoji evidenci?
Druga možnost (čeprav nisem v teh vodah in ne vem ali je to izvedljivo v tvojem primeru) je ta, da vsakič od tega dobavitelja pred vnosom pobrišeš v svoji bazi vse artikle in na novo uvoziš.
Sicer bi pa morda Roky-jev team lahko ponudil take reči (kolikor vem se prav s temi uvozi ukvarjajo).
Bazo proti XML dobavitelja primerjaš po šifri artikla dobavitelja (supplier SKU), ki bi jih moral že od samega začetka uvažat (ali ročno vpisat, če artiklov ni npr. več kot 100).
Za vsakega dobavitelja dodaj njegov SKU.
EAN koda se v praksi (vsaj pri igrah) ne obnese, ker so kode istega artikla marsikdaj različne. Mogoče lahko kdo drug pove, če ima drugačne izkušnje.
Če dobavitelj obravnava različne barve kot različne izdelke, priporočam, da jih tudi vi, ker boste imeli dosti manj dela (tudi tvoja stranka materialno verjetno vodi različne barve pod različnimi SKUji).
Gogy:
Druga možnost (čeprav nisem v teh vodah in ne vem ali je to izvedljivo v tvojem primeru) je ta, da vsakič od tega dobavitelja pred vnosom pobrišeš v svoji bazi vse artikle in na novo uvoziš.
Sorry, ampak slabšega predloga ne bi mogel dati, ker bi v tvojem primeru artikel pri vsakem uvozu imel različen ID. :) ID artikla se v nobenem primeru ne sme spreminjati. To zahtevajo tako razni uvozi v druge aplikacije/primerjalnike cen/oglasnike, kot ohranjanje integritete podatkov.
EAN koda je le v XMLju od dobavitelja, v svoji magento trgovini pa nimam shranjene EAN kode. IDji pa se razlikujejo, ker mi v trgovini imamo IDje od magenta, oni pa imajo svoej IDje tako da ne morem preverjat. Tudi SKU koda je v naši magento trgovini čisto neka random in se ne ujema z kodo dobavitelja. Torej nobene kode, nobeni IDji nič se dejansko ne ujema. Edino po čem bi lahko preverjali je ime artikla v katerem je ponavadi tudi model. Tukaj pe je treba skoraj neko umetno inteligenco naredit da razloči če gre za isti artikel ali ne, ker kot sem že napisal so imena lahko nekoliko drugačna (vrstni red, ena ima še kako besedo zraven recimo LCD TV druga pa nima, itd).
Naj pa povem da to rabim le za prvi uvoz. Potem bomo že shranili kateri artikli so bili uvoženi in kateri ne, tako da za naslednji zagon tega ne bo potrebno.
No kot prvo sam nisem programer tega modula, temveč fant ki mi to dela. Bo verjetno v kratkem vstopil v to debato.
Jaz sem imel pa tako idejo, samo je potem baje to kar potratno.
Skratka neka taka logika.
V magento imam recimo artikel imenovan: LCD TV GRUNDIG VISION 7 37 VLC 9040 C
V XMLju dobavitelja pa:
<izdelekIme>
Grundig Vision 9 37 VLC 9040 C LCD sprejemnik (94 cm, Full HD)
</izdelekIme>
Aplikacija pride do zgoraj navedenega artikla v XMLju preveri ime in gre vsako besedo posebej primerjat. Recimo najprej vzame "Grunding" in izlušči v moji trgovini vse ki imajo ime "Grunding" in jih ostane rečemo 500, potem vzame "Vision" besedo in v teh 500 pogleda kateri imajo še "Vision" in jih ostane recimo 20. Potem pogleda kateri ima besedo "9" in jih ostane recimo 5.... in vse tako naprej. Po mojem ni slaba ideja vendr naj bi bila kar zakomplicirana za implementacijo.
Ta način ti bo porabil preveč časa da bo vse pregledal 100%, če pogledaš 1 artikel več pomeni toliko in toliko možnosti več + tega boš moral za vsako besedo delat querye razen če zadevo shraniš v kak cache ali nek fajl in tam iščeš, po možnosti kar vse daš v array. Sam sem to delal z excel datotekami in je trajalo kar neki časa da se je vse skupaj preverjalo, poizvedbe naredilo, zapisalo, izvedlo ...
SlimDeluxe:
Gogy:
Druga možnost (čeprav nisem v teh vodah in ne vem ali je to izvedljivo v tvojem primeru) je ta, da vsakič od tega dobavitelja pred vnosom pobrišeš v svoji bazi vse artikle in na novo uvoziš.Sorry, ampak slabšega predloga ne bi mogel dati, ker bi v tvojem primeru artikel pri vsakem uvozu imel različen ID. :) ID artikla se v nobenem primeru ne sme spreminjati. To zahtevajo tako razni uvozi v druge aplikacije/primerjalnike cen/oglasnike, kot ohranjanje integritete podatkov.
@SlimDeluxe, razumem. Saj zato sem kot prvi predlog predlagal točno to o čemer pišeš ti oz. sem vprašal ali ne dobijo tega podatka... ker tega nimajo morajo poskati alternativo. Alternativa je drugi predlog za katerega praviš, da je najslabši. Imaš kakega boljšega?
@blindek, razmislite o dodatnih poljih (EAN, ID) in jih potem uskladite oz. boste pri uvozu vedeli, da ta artikel že obstaja in ga je potrebno samo posodobit.
Seveda imam in sem ga napisal. Morda malo površno ampak efekt bi bil na bazi takšen:
Product (id, supplier1sku, supplier2sku, currentsupplierid)
Supplier (id)
Če pa nočeš spreminjati originalne Product tabele, pa:
Product(id)
Supplierhasproduct(supplierid, productid, sku, current)
Supplier(id)