Wstęp
W tym artykule dowiesz się, w jaki sposób można utworzyć dedykowaną stronę z listą produktów w PrestaShop.
Do tego celu został przygotowany prosty moduł, o którym dowiesz się więcej w dalszej części wpisu.
Wymagania
Moduł powstał w oparciu o wersję PHP 8.1, ponieważ jest ona zalecana dla PrestaShop 8.1 (która na dzień publikacji tego artykułu jest najnowszą wersją PrestaShop). Ta wersja PHP będzie miała zapewnione wsparcie w nadchodzącej wersji Presty 9.0, więc rozwiązanie przedstawione w artykule powinno pozostać kompatybilne.
Instalacja modułu
Zacznijmy od instalacji modułu.
Przejdź do katalogu modułów w swoim PrestaShop'ie:
cd /path/to/your/prestashop/modules
I sklonuj repozytorium następującym poleceniem:
git clone https://github.com/elektryz/listingcontrollerexample.git
Następnie zaloguj się do BackOffice PrestaShop i przejdź do zakładki Moduły.
Wyszukaj moduł wpisując listingcontrollerexample, a następnie zainstaluj go.
Możesz oczywiście zrobić to również z użyciem wiersza poleceń z poziomu katalogu głównego Twojego sklepu poleceniem*:
php bin/console prestashop:module install listingcontrollerexample
* Jeżeli użycie tej komendy nie powiedzie się, spróbuj użyć aliasu dla Twojej wersji PHP, np. php8.1 lub php81
Dlaczego tworzyć własną stronę zamiast utworzyć nową kategorię?
Można zadać sobie pytanie: jaki jest cel tworzenia własnej strony z listą produktów, skoro można po prostu utworzyć nową kategorię i przypisać do niej dowolne produkty?
Tego typu strona okazuje się bardzo przydatna w sytuacji, gdy lista produktów ma być w jakikolwiek sposób generowana lub personalizowana.
Przykłady zastosowań:
1. Polecane dla Ciebie
Strona wyświetlająca produkty podobne do tych, które użytkownik zakupił w przeszłości (listing bazujący na historii zamówień użytkownika). Tutaj nie ma sensu tworzyć nowej kategorii, ponieważ każdy będzie posiadał indywidualną listę produktów.
2. Ulubione produkty / Lista życzeń
Strona z produktami może tutaj służyć do wyświetlania produktów oznaczonych jako ulubione lub dodanych do listy życzeń.
3. "Ostatnie sztuki"
Strona z listą produktów, które są na wyczerpaniu. Tutaj lista produktów będzie się zmieniać w zależności od stanu magazynowego.
4. Dedykowana lista
Strona z listą produktów, której zawartość jest generowana na podstawie dowolnych kryteriów, np. posiadające wybranego producenta, kategorię, przedział cenowy itp. Można również pokusić się o wdrożenie odczytywania listy produktów z zewnętrznego źródła (np. API, plik CSV) aby dynamicznie zmieniać zawartość bez konieczności ręcznego ustawiania kategorii danym produktom.
Oczywiście na myśl przychodzą również strony typu: nowości, bestsellery oraz promocje, natomiast one są już obsługiwane przez standard systemu PrestaShop.
Kod modułu
Teraz częsciowo opiszę kod modułu.
Główna klasa modułu
Główna klasa modułu, czyli:
modules/listingcontrollerexample/listingcontrollerexample.php
Jest bardzo prosta. Pozwala wyświetlić stronę konfiguracji modułu z linkiem do strony listingu produktów.
Dostarczanie produktów
Cała logika znajduje się w katalogu
modules/listingcontrollerexample/src/Provider
Pierwsza z klas, czyli ProductProvider posiada metodę getProducts(), która zwraca dane
o produktach. Przykład obejmuje wszystkie produkty w sklepie, ale można tutaj ustawić
dowolny warunek na konkretne ID produktów lub inne kryteria.
Druga z klas, tj. SearchProvider implementuje interfejs ProductSearchProviderInterface i zawiera metodę runQuery(), która procesuje powyższe zapytanie
zawarte w ProductProvider::getProducts().
Jeżeli w swojej Preście wyszukany zostanie fragment implements ProductSearchProviderInterface to pojawi się
kilka wyników. Jest to standardowy interfejs stosowany przez PrestaShop do dostarczania danych
do listingu.

W związku z tym można podejrzeć kod zawarty w tych klasach, dostosować i wykorzystać (tak jak zostało to zrobione w tym module).
Wyświetlanie produktów
W pliku:
modules/listingcontrollerexample/controllers/front/view.php
Znajduje się kontroler, który wyświetla listę produktów.
Kontroler dziedziczy po klasie ProductListingFrontController. Można analogicznie wyszukać, które klasy w Preście korzystają z tego dziedziczenia.

Zastosowany przeze mnie kod jest dość jednoznaczny.
Ciekawostką może być tu przypisanie do smarty zmiennych productClass oraz productClassList.
Standardowo Presta wyświetlała 3 produkty w rzędzie, a ja chciałem wyświetlać 4, aby wizualnie listing produktów
prezentował się w lepszy sposób.
Poniżej można zobaczyć porównanie:
widok 3 produktów w rzędzie
widok 4 produktów w rzędzie
Nic nie stoi na przeszkodzie, żeby w tych zmiennych dodać swoje klasy CSS - w ten sposób można łatwo wpłynąć na wygląd listingu.
Podsumowanie
Dziękuję za uwagę :)
Jeżeli potrzebujesz pomocy z PrestaShop lub zamierzasz wdrożyć dedykowany moduł do swojego sklepu, zapraszam do kontaktu - z przyjemnością pomogę. Zachęcam do zapoznania się również z innymi, świadczonymi przeze mnie usługami.
Życzę satysfakcjonującej i bezproblemowej pracy z Prestą ;)