Prestashop – funkcja Product::deleteCategories() czyści za wiele …..

Bytomasz

Prestashop – funkcja Product::deleteCategories() czyści za wiele …..

W trakcie realizacji mechanizmu automatycznego importu produktów do sklepu Prestashop, a szczególnie w przypadku realizacji go z mechanizmem aktualizacji istniejących rekordów (a nie usuwania wszystkich produktów i ponownego ich dodania) zachodzi potrzeba ew. skorygowania do których kategorii produkt należy. Jeśli mamy unikalny identyfikator produktu jak np. nr referencyjny/indeks/kod produktu, możemy odnaleźć produkt w bazie danych a następnie usunąć kategorie do których jest przypisany.

Usuwanie kategorii, do których produkt jest przypisany uzyskujemy wołaniem funkcji Product::deleteCategories($clean_positions = false).

Notację użyłem zwodniczą, ponieważ funkcja ta nie jest funkcją statyczną i można ją wywołać tylko mając utworzony obiekt klasy Product.

$product = new Product($id);
$product->deleteCategories(true);

Pułapka tkwi w parametrze wywołania $clean_positions. Jeśli wywołamy funkcję z parametrem true, funkcja ta dodatkowo będzie wewnątrz wołać inną funkcję cleanPositions(), która w założeniu porządkuje pozycje produktów w kategoriach.

W praktyce, oprócz tego, że jest bardzo czasochłonna, to porządkuje za wiele. Nie wiem, jak dalej będzie wyglądać ten problem, ale w przypadku Prestashop 1.6.1.5 wywołanie takie po prostu usuwało przypisania produktów do kategorii….

Ostrzegam!

Pozdrowienia,

Więcej: Programista Prestashop

About the author

tomasz administrator