strona główna / faq / PrestaShop / odpowiedź
Q.

Jak tworzyć moduły PrestaShop?

#moduły#programowanie#php#module-development#prestashop

Czym jest moduł PrestaShop?

Moduł to samodzielna paczka PHP, która rozszerza funkcjonalność PrestaShop bez modyfikacji plików rdzenia. Dzięki temu:

  • Aktualizacja PrestaShop nie usuwa Twoich zmian
  • Moduł można łatwo zainstalować, wyłączyć i odinstalować
  • Można go przenosić między sklepami

Minimalna struktura modułu

mymodule/
├── mymodule.php        ← główna klasa modułu
├── logo.png            ← ikona (32×32 px)
└── views/
    └── templates/
        └── hook/
            └── displayHome.tpl  ← szablon Smarty

Główna klasa modułu

<?php
class MyModule extends Module
{
    public function __construct()
    {
        $this->name = 'mymodule';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'Damian Ślimak';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Mój Moduł');
        $this->description = $this->l('Opis modułu.');
    }

    public function install()
    {
        return parent::install() && $this->registerHook('displayHome');
    }

    public function hookDisplayHome($params)
    {
        return $this->display(__FILE__, 'displayHome.tpl');
    }
}

Hooki — serce modułów PrestaShop

Hook to punkt zaczepienia w szablonie lub logice sklepu, w którym moduł może wstrzyknąć swój kod. Przykładowe hooki:

HookGdzie działa
displayHomeStrona główna
displayHeaderSekcja <head> każdej strony
displayProductButtonsStrona produktu (przyciski)
actionCartSaveAkcja zapisu koszyka
actionOrderStatusUpdateZmiana statusu zamówienia
displayAdminOrdersViewPanel zamówienia w adminie

Pełna lista hooków: devdocs.prestashop-project.org

Panel konfiguracyjny modułu

Większość modułów ma formularz w backoffice. Dostęp przez metodę getContent():

public function getContent()
{
    if (Tools::isSubmit('submit' . $this->name)) {
        Configuration::updateValue('MYMODULE_TEXT', Tools::getValue('MYMODULE_TEXT'));
    }

    $text = Configuration::get('MYMODULE_TEXT');

    return '
        <form method="POST">
            <input type="text" name="MYMODULE_TEXT" value="' . htmlspecialchars($text) . '">
            <input type="submit" name="submit' . $this->name . '" value="Zapisz">
        </form>
    ';
}

Wartości modułu przechowujesz w tabeli ps_configuration przez klasę Configuration.

Override — alternatywa dla modułów

Jeśli chcesz zmienić zachowanie istniejącej klasy PrestaShop (np. Cart, Product, Order), użyj mechanizmu override:

override/
└── classes/
    └── Cart.php   ← rozszerza klasę Cart, nie modyfikuje oryginału

Override jest prostszy niż moduł, ale trudniejszy do utrzymania przy aktualizacjach.

Debugowanie i tryb deweloperski

Włącz tryb debugowania w config/defines.inc.php:

define('_PS_MODE_DEV_', true);

Lub w panelu admina: Konfiguracja Zaawansowana → Wydajność → Tryb debugowania.

Gdzie opublikować gotowy moduł?

  • PrestaShop Addons Marketplace — oficjalny sklep, wymaga weryfikacji technicznej
  • GitHub — dla modułów open-source, buduje portfolio
  • Własna strona — sprzedaż bezpośrednia, 100% marży

Potrzebujesz modułu PrestaShop szytego na miarę? Opisz projekt — tworzę moduły i integracje dla sklepów PrestaShop od ponad 8 lat.

Zastrzeżenie Treści w tej bazie wiedzy mają charakter informacyjny i edukacyjny. Nie stanowią profesjonalnej porady technicznej, prawnej ani handlowej. Konfiguracje, kody i procedury stosuj na własną odpowiedzialność — zawsze wykonaj backup przed wprowadzeniem zmian w sklepie lub systemie. Autor nie ponosi odpowiedzialności za szkody wynikłe z zastosowania się do zamieszczonych informacji. Jeśli potrzebujesz fachowej pomocy — skontaktuj się ze mną.