PrestaShop | Jak w PrestaShop przenieść koszyk do menu?

Podczas prac z systemem PrestaShop, przychodzi taki moment, gdy klient ma przygotowany swój indywidualny szablon sklepu. Taki szablon często przygotowuje grafik nieznający struktury sklepu. Ale programista powinien powinien sobie poradzić z każdym szablonem - mimo że jest niestandardowy i na pierwszy rzut oka, będzie potrzebna gruntowna przebudowa kilku elementów sklepu.

Ostatnio miałem okazję budować nowy układ sklepu opartego o domyślny szablon PrestaShop w wersji 1.6. Ważnym elementem na projekcie było menu. Dlaczego? Do menu zostało przeniesione wiele elementów, które znajodwały się w górnej części sklepu; mowa tu o koszyku, logowaniu użytkownika czy wyszukiwarce czy też logotypie.

Wiele elementów wystarczy przenosić między plikami tpl, tworząc swój własny szablon. Jednak można zrobić to bardziej profesjonalnie i przygotować nowe zaczepy (hook) i tam przenosić właśnie przenosić poszczególne elementy. Zaletą takiego rozwiązania jest to, że nie trzeba nic przenosić z pliku do pliku, a jedynie tworzymy punkt zaczepu do którego kierujemy nowe elementy. Tak, więc na przykład tworzymy nowy hook odpowiedzialny za wyświetlanie koszyka.

{hook h="displayCartinmenu"}

Powyższy fragment kodu umieszczamy w pliku tpl, tam gdzie chcemy wyświetlać nowe elementy, moduły. Ja dodałem go do plikublocktopmenu.tpl w ./themes/nazwa_szablonu/modules/blocktopmenu/. Ale żeby wszystko działało należy utworzyć nowy hook w bazie danych - nie znalazłem sposobu na instalację nowych hook'ów z poziomu zaplecza sklepu, więc tworzymy nowy wpis w tabeli ps_hook.

Powyżej printscreen z bazy danych. Musimy podać nazwę hook'a, w moim przypadku displayCartinmenu, podajemy title oraz description. Dodatkowo można także wygenerować sobie alias dla nowego hook'a w drugiej tabeli ps_hook_alias (sprawa prosta, więc nie opisuję szczegółów). Żeby móc przypisać moduły do nowego zaczepu, musimy najpierw poinformować moduł jak ma się zachowywać w nowym miejscu. Trzeba więc dodać nową metodę do pliku głównego pliku php w danym module (ja modyfikowałem plik blockcart.php, ponieważ to temu właśnie modułowi pozwalam na wyświetlanie w nowym miejscu).

public function hookCartinmenu($params) { $params['blockcart_top'] = true; return $this->hookRightColumn($params); }

Co robi powyższy kod? Tworzę funkcję, która odpowiada za wyświetlenie modułu koszyka w hook o nazwie Cartinmenu, który utworzyłem wcześniej. Dwie linie kodu wewnątrz funkcji są identyczne jak dla wyświetlania koszyka w topie:

public function hookTop($params) { $params['blockcart_top'] = true; return $this->hookRightColumn($params); }

Czyli powielam schemat wyświetlania, który już działa dla hook o nazwie Top. Ostatnią czynnością jaką należy wykonać na koniec to dodanie modułu do naszego zaczepu przez zaplecze sklepu.

W panelu administracyjnym musimy kolejno wybrać z menu: "Moduły", następnie "Pozycje" a na koniec "Przemieszczanie modułu".

Z pierwszej listy wybieramy moduł, z drugiej zaczep do którego dodajemy moduł i zapisujemy zmiany. Po tej operacji powinniśmy otrzymać poniższy układ:

Jeżeli wszystkie kroki się powiodły to i efekt powinien być od razu widoczny na sklepie. W moim przypadku koszyk został dodany do menu - modułu, który jest zintegrowany z PrestaShop.

Korzystanie z hook jest bardzo przydatne szczególnie gdy potrzebujemy wyświetlić jakiś w moduł w niestandardowym miejscu na sklepie. Podsumowując, małym nakładem pracy można sporo zyskać, przy okazji nie mieszając w kodzie źródłowym poszczególnych modułów.

Kontakt