Jak tworzyć moduły 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:
| Hook | Gdzie działa |
|---|---|
displayHome | Strona główna |
displayHeader | Sekcja <head> każdej strony |
displayProductButtons | Strona produktu (przyciski) |
actionCartSave | Akcja zapisu koszyka |
actionOrderStatusUpdate | Zmiana statusu zamówienia |
displayAdminOrdersView | Panel 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.