Jak napisać moduł PrestaShop


W tym artykule zajmiemy się utworzeniem najprostszego modułu PrestaShop dla wersji 1.7. Rozszerzenie będzie zawierało najbardziej podstawowe opcje wraz z wyświetlaniem przykładowej treści. Poza kodem zamieszczamy omówieniem poszczególnych sekcji.

Zaczynamy od wymyślenia nazwy modułu. Warto żeby w jakiś sposób opisywała ona funkcję jaką będzie pełnił dany dodatek. W naszym przypadku nadamy nazwę „prestapros_demo”. Rozszerzenia znajdują się w katalogu modules i w nim należy utworzyć katalog z wymyśloną wcześniej nazwą. Następnie, wewnątrz katalogu dodajemy plik php o tej samej nazwie. Powinno się również dodać plik grafiki twórcy. My tworzymy moduł dla wersji 1.7, dlatego dodajemy plik logo o rozdzielczości 128 x 128 px w formacie png.

Ostatnim plikiem jaki dodajemy jest index.php. Tworzymy go również w katalogu modułu. Do pliku należy wkleić poniższą zawartość. Jest to plik zabezpieczający dostęp do katalogu z zewnątrz.

<?php

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');

header('Location: ../../');
exit;



Finalnie powinniśmy mieć poniższą strukturę plików:

jak stworzyć mosuł PrestaShop

Kolejnym krokiem jest edycja głównego pliku modułu. Wklej do niego poniższy kod:

<?php

if (!defined('_PS_VERSION_')) {
    exit;
}

class prestapros_demo extends Module
{
    public function __construct()
    {
        $this->name = 'prestapros_demo';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'PrestaPros.com';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = [
            'min' => '1.7',
            'max' => _PS_VERSION_
        ];
        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('PrestaPros demo module');
        $this->description = $this->l('Display demo content.');

        $this->confirmUninstall = $this->l('Are you sure you want to uninstall?');
    }
}



Pierwszy warunek (if) zabezpiecza przed bezpośrednim  wywołaniem pliku z zewnątrz. Jeśli przy wywołaniu pliku nie ma zdefiniowanej stałej  _PS_VERSION_ , to skrypt zakończy działanie.

Następnie tworzymy klasę o nazwie modułu która rozszerza klasę Module. Jest to działanie wymagane do poprawnego działania rozszerzenia.

Przyjrzyjmy się teraz budowie konstruktora. Jeśli nazwa Twojego modułu różni się od tego w artykule, to zmień wartość $this->name. Dodatkowo możesz zmienić $this->author. Resztę atrybutów możesz pozostawić taką jak w przykładzie.


$this->name to identyfikator modułu, jego wartość musi być taka sama jak nazwa katalogu rozszerzenia
$this->tab definiuje w jakiej sekcji w listy modułów w  panelu administracyjnym będzie wyświetlany moduł. W naszym przypadku ustawimy wartość na 'front_office_features', ponieważ moduł ma za zadanie wyświetlać dodatkowy tekst po stronie front-endu. Więcej wartości atrybutu można znaleźć na stronie PrestaShop
$this->version to wersja modułu. W naszym przypadku możemy ustawić ją na 1.0.0
$this->author wprowadzamy podpis identyfikujący autora, który będzie widoczny po stronie panelu administracyjnego
$this->need_instance warunkuje wywoływanie klasy modułu przy ładowaniu strony modułów w panelu administracyjnym
$this->ps_versions_compliancy tablica określa wartość wersji PrestaShop dla których moduł będzie działał. Jeśli wersja sklepu nie mieści się w przedziale, modułu nie uda się nawet zainstalować.
$this->bootstrap definiuje czy widoki w panelu administracyjnym są tworzone przy użyciu bootstrapa

parent::__construct(); wywołuje metodę konstruktora klasy Module.
Linijki które są wywoływane po powyższym kodzie odpowiadają odpowiednio za: wyświetlaną nazwę, opis i komunikat przy kasowaniu modułu PrestaShop. Opakowane są w metodę 'l', która pozawala na wprowadzenie tłumaczeń.

Omówiliśmy już konstruktor, kolejnym krokiem jest dodanie dwóch prostych aczkolwiek koniecznych do poprawnego działania metod. Na końcu klasy głównego pliku php (przed ostatnim zamknięciem '}') doklejamy poniższy kod:

    public function install()
    {
        if (!parent::install()
            || !$this->registerHook('displayHome')
        ) {
            return false;
        }
        return true;
    } 
   
    public function uninstall()
    {
        return parent::uninstall();
    }



Obie metody wywołują funkcje klay Module i odpowiadają kolejno za obsługę instalacji i usuwania modułu w panelu administracyjnym PrestaShop.

Metoda „registerHook” odpowiada za „podpięcie” modułu pod dany hook podczas instalacji. Słowem wyjaśnienia, w kodzie PrestaShop znajduje się duża liczba miejsc, które pozwalają na podpięcie modułów. Podpięcie pozwala na wykonanie własnego kodu w odpowiedniej metodzie, o czym poniżej. Cała lista hooków dla wersji 1.7 znajduje się tutaj.

W naszym przypadku podpinamy moduł pod hook 'displayHome', co pozwoli na wyświetlenie treści na stronie głównej sklepu PrestaShop.

Kolejnym krokiem jest dodanie metody, która obsłuży ww.hook. Przyklej poniższy kod zaraz za metodą uninstall:

    public function hookDisplayHome($params)
    {
        return '<a href="https://prestapros.com/">PrestaPros.com</a>';
    }



Metoda zwraca stringa z linkiem do naszej strony. Możesz zmienić zwracaną wartość, na taką jaką chcesz.

Przejdź do panelu administracyjnego sklepu do sekcji modułów w celu instalacji rozszerzenia. Na liście modułów do instalacji znajdź nasz moduł i kliknij przycisk instalacji.

jak stworzyć mosuł PrestaShop

Po instalacji, powinien pojawić się komunikat o jej pozytywnym przebiegu. Można teraz wejść na stronę główną i zobaczyć dodany kod.

jak stworzyć mosuł PrestaShop

Warto pamiętać o tym, że wiele modułów może być podpięta pod jeden hook. Pozycję jaką dane rozszerzenie ma w danym hooku, można ustawić w panelu administracyjnym:

jak stworzyć mosuł PrestaShop

W celu zapewnienia maksymalnej wygody użytkowników przy korzystaniu z witryny ta strona stosuje pliki cookies. Szczegóły w naszej Polityce prywatności. Kliknij " Zgadzam się", aby ta informacja nie wyświetlała się więcej