Parowanie produktów z istniejącą ofertą w sklepie – integracja MobyDick
Dokument opisuje sposób parowania produktów z hurtowni MobyDick z istniejącą ofertą w sklepie, a także procedurę naprawy błędnych powiązań, jeśli dane zostały wcześniej źle sparowane.
Cel
- Sparowanie produktów z hurtowni z już istniejącymi produktami w sklepie
- Uniknięcie tworzenia duplikatów
- Możliwość naprawy błędnych parowań bez czyszczenia całej bazy produktów
Jak działa parowanie
Podczas importu integracja próbuje:
- Znaleźć istniejący produkt w sklepie
- Jeśli znajdzie dopasowanie → produkt zostaje sparowany
- Jeśli nie znajdzie → w standardowym trybie może zostać utworzony nowy produkt
Funkcja mobydick_custom_matcher() pozwala:
- wymusić własną logikę dopasowania,
- tymczasowo zablokować dodawanie nowych produktów,
- przeprowadzić kontrolowane parowanie z istniejącą ofertą.
Podstawowy scenariusz – parowanie z istniejącą ofertą
Krok 1 – aktualizacja modułu
Zaktualizuj moduł seigimobydick do najnowszej wersji.
Krok 2 – dodanie tymczasowej funkcji parującej
Dodaj funkcję mobydick_custom_matcher() tymczasowo w sklepie, np. w pliku:
config/defines.inc.php
Funkcja musi być dostępna globalnie.
Krok 3 – sprawdzenie danych przekazywanych do funkcji (opcjonalnie)
Aby sprawdzić, jakie dane przekazuje integracja:
function mobydick_custom_matcher($param) {
var_dump($param);
die;
}
Uruchom integrację ręcznie w nowej zakładce:
https://{domena}/modules/seigimobydick/cron/{nazwa_hurtowni}.php
Przykładowe dostępne klucze w $param:
-
supplier_id -
supplier_reference -
reference -
ean13 -
settings -
raw -
wholesaler
Krok 4 – właściwe parowanie produktów
Po ustaleniu, które pola są właściwe, użyj docelowej funkcji parującej.
Przykładowa uniwersalna funkcja parująca
function mobydick_custom_matcher($param) {
$query = new DbQuery();
$query->select('p.id_product');
$query->from('product', 'p');
$query->where(
'p.reference = \'' . pSQL($param['ean13']) . '\'
AND p.ean13 = \'' . pSQL($param['reference']) . '\''
);
$id_product = (int)Db::getInstance()->getValue($query);
if ($id_product) {
return new \Product($id_product);
}
// Tymaczoso zablokuje dodawanie nowych produktów, na czas parowania
throw new \seigi\seigimobydick\Exception\skipProduct('Custom Matcher: Blokuj dodawanie nowych do czasu sparowania.');
}
Uwagi
-
Warunek
WHEREmożna dowolnie zmodyfikować, np.:- po
reference, - po
ean13, - po
supplier_reference, - po kombinacji pól.
- po
-
Funkcja jest wywoływana w trakcie importu, w momencie próby dopasowania produktu z hurtowni do produktu w sklepie.
Krok 5 – uruchomienie importu
Uruchom import MobyDick.
Efekt:
- produkty zostaną sparowane z istniejącą ofertą w sklepie,
- nowe produkty mogą zostać zablokowane (w zależności od warunku).
Krok 6 – usunięcie kodu tymczasowego
Po zakończeniu parowania:
- Usuń funkcję
mobydick_custom_matcher()zdefines.inc.php - Przywróć standardową konfigurację sklepu
Krok 7 – finalny import
Uruchom import ponownie, aby integracja mogła:
- dociągnąć brakujące produkty,
- działać w standardowym trybie.
Sekcja naprawcza – gdy parowania są błędne
Jeśli produkty zostały wcześniej źle sparowane lub powstały nieprawidłowe relacje, należy najpierw wyczyścić mapowania integracji.
Krok N1 – usunięcie błędnych produktów
Usuń produkty, które:
- są zdublowane,
- są błędnie sparowane,
- nie powinny istnieć w sklepie.
Poprawne produkty pozostają bez zmian.
Krok N2 – wyczyszczenie tabeli powiązań
Tabela:
ps_mobydick_relations
Scenariusz 1 – jedna hurtownia
Jeśli w sklepie działa jedna integracja / jedna hurtownia:
TRUNCATE TABLE ps_mobydick_relations;
Rozpoczynamy parowanie od zera.
Scenariusz 2 – wiele hurtowni
Jeśli w sklepie działa więcej niż jedna hurtownia:
- nie wykonujemy TRUNCATE
- usuwamy tylko wpisy odpowiadające danej hurtowni (np. PBS)
Krok N3 – ponowne parowanie
Po wyczyszczeniu powiązań:
- Dodaj funkcję
mobydick_custom_matcher() - Uruchom import
- Sparuj produkty z istniejącą ofertą
- Usuń kod tymczasowy
- Wykonaj finalny import
Podsumowanie
- Parowanie odbywa się z istniejącą ofertą w sklepie
- Błędne parowania można naprawić bez czyszczenia całej bazy produktów
-
ps_mobydick_relationskontroluje mapowania integracji - Funkcja
mobydick_custom_matcher()jest rozwiązaniem tymczasowym i kontrolnym