Problem z wyszukiwarką fasetową w PrestaShop przy użyciu LiteSpeed Cache? Mamy rozwiązanie! Drukuj

  • litespeed cache, ps_facetedsearch, wyszukiwarka fasetowa, prestashop 1.7, prestashop 8, prestashop 8.2, prestashop
  • 0

Wyszukiwarka fasetowa (moduł ps_facetedsearch) to jeden z najważniejszych elementów nowoczesnego sklepu PrestaShop. Pozwala ona klientom szybko filtrować produkty według parametrów. Jednak użytkownicy korzystający z potężnego przyspieszenia, jakie daje LiteSpeed Cache na serwerach devhost.pl, często napotykają na frustrujący problem: filtry przestają działać, a strona nie reaguje na próby sortowania produktów.

Dlaczego LiteSpeed Cache gryzie się z filtrowaniem?

Problem wynika ze sposobu, w jaki LiteSpeed próbuje zbuforować dynamiczne zapytania wyszukiwarki. W wielu przypadkach standardowe ustawienia modułu cache "zamrażają" wyniki filtrów lub blokują zapytania AJAX, które odpowiadają za odświeżanie listy produktów bez przeładowania strony. Nawet wykluczenie parametrów URL (takich jak ?q=) w panelu konfiguracyjnym modułu LiteSpeed Cache często nie przynosi rezultatu.

Rozwiązanie: Kluczowa modyfikacja pliku Hook.php

Okazuje się, że źródłem konfliktu jest sposób, w jaki rdzeń PrestaShop przetwarza odpowiedzi z "haków" (hooks) podczas współpracy z LiteSpeedem. Rozwiązaniem, które działa niezależnie od używanego szablonu (również na popularnym szablonie Warehouse), jest prosta modyfikacja w plikach systemowych.

Instrukcja krok po kroku

Aby naprawić działanie filtrów fasetowych, wykonaj poniższe kroki:

  1. Zaloguj się na swój serwer FTP lub przez Menedżer Plików w panelu DirectAdmin.
  2. Przejdź do katalogu: override/classes/
  3. Otwórz do edycji plik Hook.php (jeśli plik nie istnieje, upewnij się, że nie został nadpisany w innym miejscu lub stwórz odpowiedni override).
  4. Znajdź w kodzie następujący fragment:
if(is_string($html) || is_array($html) || ($html==null)){            
    return $html;        
} else {            
    return ['object' => $html];        
}
  1. Usuń powyższy fragment i zastąp go jedną, prostą linią:
return $html;

Dlaczego to działa?

Standardowy kod próbuje "opakować" wynik działania modułu w obiekt w określonych warunkach. LiteSpeed Cache do poprawnej pracy i serwowania zbuforowanej treści potrzebuje czystego wyniku (string/array). Uproszczenie tej instrukcji sprawia, że komunikacja między serwerem LiteSpeed a modułem filtrów staje się przejrzysta, co natychmiast przywraca stabilność fasetówki.

Ostatni krok: Czyszczenie pamięci podręcznej

Po zapisaniu zmian koniecznie wykonaj dwie czynności:

  • Wyczyść cache w panelu modułu LiteSpeed Cache (przycisk Flush All) i w panelu administratora sklepu -> Wydajność - Wyczyść pamięć podręczną.

Dzięki tej zmianie Twój sklep na devhost.pl będzie działał błyskawicznie, a klienci będą mogli bez przeszkód korzystać z filtrów produktów. To rozwiązanie jest uniwersalne i eliminuje problem występujący w sklepach na całym świecie.


Czy ta odpowiedź była pomocna?

« Wstecz