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

alt text alt text

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.

alt text

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.

alt text

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:

alt text widok 3 produktów w rzędzie

alt text 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ą ;)

zmiany? rozwój Twojej strony? zaistnienie w sieci?
Gotów na Skontaktuj się i napisz, czego Ci trzeba