Zawartość artykułu
O co chodzi z hookami w PrestaShop?
Jak wiadomo podstawą rozmieszczenia modułów i elementów w szablonie w PrestaShop są tzw. Hooki (przyczepy). Są to sloty w szablonie (lewa kolumna, prawa kolumna, stopka, nagłówek itp.) gdzie możemy przypiąć moduł. Oczywiście o ile jego twórca to przewidział, że można go tam wpiąć. Wykonujemy to przez opcję „Przemieszczanie modułu” widoczną w dziale „Pozycje”:
Problemy z przyczepianiem modułu do hooka
Niestety w zależności od wersji PHP i wersji PrestaShop może wystąpić problem techniczny z otworzeniem tej strony. Wynika to z tego, że skrypt musi przetworzyć dużą ilość danych.
Może wtedy pojawić się komunikat:
Request Timeout This request takes too long to process, it is timed out by the server. If it should not be timed out, please contact administrator of this web site to increase 'Connection Timeout'.
Problem wystąpił w sklepie PrestaShop w wersji 1.7.3.4, PHP: 5.6.40
Wypada wtedy próbować zwiększyć możlości serwera, zwiększyć werję PHP itp. Jednak te operacje mogą nastręczać dużo problemów technicznych. Szczególnie jeśli chodzi o kompatybilność modułów w nowszej wersji PHP.
Zawsze możemy wykonać „ręcznie” to przypisanie. Czyli wykonać de facto odp. zapytanie do bazy danych, które przypisze wybrany moduł w wybrane miejsce.
Pokażemy to na przykładzie przypisania modułu filtrującego („Nawigacja Fasetowa”) do lewej kolumny.
Operacja analogicznie będzie działać w wersji PS 1.7 jak i PS 1.6. Jedynie w innych miejscach wykonuje się kopię bezpieczeństwa albo moduły mogą mieć inną „nazwę techniczną”
Kopia bezpieczeństwa i PMA
Po pierwsze primo wykonaj kopię bazy danych:
Zaawansowane -> Baza danych
Tak na wszelki wypadek gdyby nasze manipulacje coś zepsuły.
Po drugie primo 🙂 Ustal link do PhpMyAdmin na Twoim serwerze i tam się zaloguj.
Jak znaleźć ten link i dane do logowania poruszaliśmy m.in. tutaj:
Przypisanie modułu do hooka przez bazę danych
Na początek ustalamy „nazwę techniczną” modułu, który chcemy przypisać. Wchodzimy w jego konfigurację. Nazwa techniczna będzie widoczna na samej górze:
Czyli będzie to tutaj: ps_facetedsearch
Jeśli moduł nie ma strony konfiguracji jak np. Płatność przy odbiorze użyj wyszukiwarki w adminie. Wpisz tam nazwę modułu. Pojawi się on w wynikach wyszukiwania. Jak na niego najedziesz myszą będzie do niego kierować link. W parametrze $_GET[’module_name’] linku bedzie widoczna nazwa modułu. Odczytasz ją kopiując ten link. Dla przykładu: module_name=ps_cashondelivery czyli nazwą modułu będzie tutaj
ps_cashondelivery
itd.
Jak już mamy nazwę modułu w PhpMyAdmin zaznacz bazę sklepu, wciśnij SQL i wywołaj zapytanie:
SELECT `id_module` FROM `ps_module` WHERE `name` = 'ps_facetedsearch';
Oczywiście użyj odp. dla Twojej bazy prefixu bazy danych MySQL. W naszych zapytaniach są to: ps_. Prefixy używamy w nazwach tabel.
Wynik tego zapytania da nam ID modulu który chcemy przypiąć. Dla przykładu zwróci:
101
Teraz ustalamy ID hooka:
SELECT `id_hook` FROM `ps_hook` WHERE `name` = 'displayLeftColumn';
Nazwę hooka znajemy po prostu na stronie „Pozycje”. Jest ona widoczna w nagłówku danego Hooka na liscie hooków:
OK zwróci to np.
12
OK mamy wszystko czego potrzebujemy. Teraz wystarczy, że wywołasz poniższe zapytanie bazując na zwróconych wyżej danych:
INSERT INTO `ps_hook_module`(`id_module`, `id_shop`, `id_hook`, `position`) VALUES (101,1,12,1);
Oczywiście podajemy tutaj ID sklepu = 1. Jeśli Twój ID sklepu jest inny odp. to zmodyfikuj.
Dzięki temu moduł się przypisze do wybranego hooka (tutaj do lewej kolumny) na samym początku. Będzie można go poprzestawiać w dziale „Pozycje” za pomocą tych strzałek: