MobyDick używa systemu Zaczepów (ang. Hooks) z Prestashop i thirtybees, dodając własne hooki.
Parametry
Każdy z zaczepów ma 3 wspólne parametry
Dostępne we wszystkich zaczepach:
-
settings
- Tablica zawierająca ustawienia konkretnej hurtowni -
raw
- Dane dostarczane przez hurtownie nie modyfikowane przez nas, tak jak dostarcza je hurtownia -
wholesaler
- Nasz wewnętrzny identyfikator hurtowni. Np.Action
,Ab
,AGDPartner
Dostępne w wybranych zaczepach:
-
new
- Jeśli dostępny i ==true
to produkt dopiero zostanie dodany do sklepu
W przypadku kombinacji, kombinacja dopiero zostanie dodana do sklepu. -
product
- Jeśli dostępny, zawsze zawiera natywny obiekt produktu PrestashopProduct
-
combination
- Jeśli dostępny, zawsze zawiera natywny obiekt produktu PrestashopCombination
-
save_object_after_flag
- W celu optymalizacji, kombinacja produktu nie zawsze jest zapisywana. Jeśli dokonamy zmiany w obiekcie i chcemy wymusić zapisanie, należy ustawić wartośc tego parametru na true za pomocą komendy:$params['save_object_after_flag'] = true
Pomijanie produktów
Aby pominąć produkt, należy wyrzucić wyjątek: throw new \skipException('Pomijam produkt')
Dobrą praktyką jest dodanie w komunikacie informacji, że robi to sklep, a nie sam moduł, np:
throw new \skipException('(Custom) Pomijam produkt bo ...');
throw new \skipException('(User) Pomijam produkt bo ...');
Aby zapewnić jak najłatwiejsze debugowanie problemów, najlepiej załączyć nazwę modułu, który pomija dany produkt.
throw new \skipException('(Module::'.$this->name.') Pomijam produkt bo ...');
Definicje zaczepów
Definicje zaczepów w module wyglądają następująco:
Zaczep mobydickProductInit
Zaczep przeznaczony głównie do pomijania produktów. Ten zaczep nie pozwala na modyfikację żadnych danych.
Aby pominąć produkt należy wyrzucić wyjątek \skipException
więcej informacji poniżej
Hook::exec('mobydickProductInit', [
'settings' => array(),
'raw' => $raw_data,
'wholesaler' => strtolower($this->getInternalName())
]);
Zaczep mobyDickProductBeforeSave
Zaczep pozwala na modyfikację obiektu przed jego zapisaniem do bazy.
W przypadku nowych produktów jest to produkt jeszcze niezapisany (brak ID).
Produkt jest zapisywany zaraz po zakończeniu tego zaczepu.
Hook::exec('mobyDickProductBeforeSave',[
'new' => true || false,
'product' => Product $product,
'settings' => array(),
'raw' => $raw_data,
'wholesaler' => strtolower($this->getInternalName())
]);
Zaczep mobyDickCombinationBeforeSave
Zaczep pozwala na modyfikację obiektu kombinacji. Zaraz po jego wywołaniu produkt jest zapisywany.
Hook::exec('mobyDickCombinationBeforeSave',[
'new' => true || false,
'product' => Product $product,
'combination' => $combination_object,
'settings' => array(),
'raw' => $raw_data,
'wholesaler' => 'identyfikatorhurtowni',
'save_object_after_flag' => &$save_object_after_flag
]);
Przykładowe użycie
public function hookMobyDickProductBeforeSave($params){
if(strtolower($params['wholesaler']) === 'action') {
// Zwiększenie ceny netto 2x
$params['product']->price = $params['product']->price * 2;
foreach($params['product']->description as $key => $desc){
// Nadpisanie opisu
$params['product']->description[$key] = '<p>Nadpisuję opis!</p>';
// Dodanie informacji na początku opisu
$params['product']->description[$key] = '<p>Doklejam na początku opisu</p>' . $desc;
// Dodanie informacji na końcu opisu
$params['product']->description[$key] .= '<p>Doklejam na końcu opisu</p>';
// Modyfikacja opisu - usunięcie znaczników HTML
$params['product']->description[$key] = strip_tags($desc);
}
}
}
Własna funkcja, odnajdująca produkty
Nasz moduł wspiera proste rozwiązania w zakresie parowania istniejącej oferty.
Możesz sam określić, w jaki sposób chciałbyś parować produkty. Poniżej przedstawiamy
prosty przykład kodu, który pozwoli na stworzenie systemu parowania samemu.
// Metoda dostępna od wersji 2.13.0
function mobydick_custom_matcher($param) {
$param['supplier_id']; // ID dostawcy
$param['supplier_reference']; // Nr. Ref. dostawcy (na ogól taki sam jak ID)
$param['reference']; // Kod producenta (jeśli hurtownia go dostrarcza)
$param['ean13']; // EAN13 - Jeśli jest
$param['settings']; // Tablica z ustawieniami modułu
$param['raw']; // Obiekt XML lub tablica, ktora zawiera dane bezpośrednio z hurtowni
$param['wholesaler']; // identyfikator hurtowni (zawsze małymi literami)
// Logika, która wyszukuje produkt
if($id_product = Product::getIdByEan13($param['ean13'])){
return new Product($id_product);
}
return false;
}