Kurs tworzenia wtyczek w PrestaShop
PrestaShop pozwala na dodanie nowych funkcjonalności z wykorzystanie wtyczek przygotowanych przez społeczność. Jeżeli znasz PHP i masz dostęp do serwera to możesz samodzielnie przygotować dodatek szyty pod Ciebie. Do stworzenia własnej wtyczki w PrestaShop przyda się również znajomość JavaScript. HTML i szablonów Twig. Testowanie powinno się oczywiście odbywać w osobnym środowisku testowym, aby użytkownicy nie musieli oglądać Twoich prób.
Opis
Wtyczka będzie dodawała produkty z zewnętrznego źródła danych (pliku XML)
Struktura plików
Utwórz katalog w modules
i nazwij go tak jak twoja wtyczka (pomijając spację). W moim przykładzie będzie to eskimplxmlproductsimporter
. Wewnątrz katalogu umieść plik o takiej samej nazwie i rozszerzeniu .php
. Tam umieścimy cały kod. Dodamy jeszcze kod z konfiguracją, index.php
oraz logo (png 32x32px), które będzie wyświetlało się przy wtyczce w katalogu modułów.
config_pl.xml
eskimplxmlproductsimporter.php
index.php
logo.png
Zanim zaczniemy pisać kod skupmy się na omówieniu pozostałych plików
Plik index.php
uzupełniam kodem, który uniemożliwi bezpośredni dostęp do wtyczki przez wścibskiego użytkownika.
<?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;
W pliku config_pl.xml
umieszczamy to co będzie widoczne w katalogu wtyczki
<?xml version="1.0" encoding="UTF-8" ?>
<module>
<name>eskimplxmlproductsimporter</name>
<displayName><![CDATA[Integracja produktów przez xml]]></displayName>
<version><![CDATA[1.0.0]]></version>
<description><![CDATA[Integracja produktów przez xml]]></description>
<author><![CDATA[Maciej Wlodarczak]]></author>
<tab><![CDATA[front_office_features]]></tab>
<confirmUninstall><![CDATA[Na pewno chcesz odinstalować?]]></confirmUninstall>
<is_configurable>1</is_configurable>
<need_instance>0</need_instance>
<limited_countries></limited_countries>
</module>
name
– nazwa wtyczkidisplayName
– wyświetlana nazwa w kataloguversion
– wersja wtyczki – przydatna w szczególności, jeżeli będziemy chcieli w przyszłości aktualizować ją zdalniedescription
– opis wtyczki wyświetlany w kataloguauthor
– autor wtyczkiconfirmUninstall
– tekst jaki ma się wyświetlić kiedy chcemy odinstalować wtyczkęis_configurable
– czy wtyczka będzie miała możliwość konfiguracjineed_instance
– czy moduł ma być tworzony w momencie wyświetlania go na liście modułów w katalogu (przydatne, jeżeli nasza wtyczka musi sprawdzić jakieś elementy związane np. z konfiguracją PrestaShop przed instalacją.limited_countries
– umożliwia ograniczenie wtyczkę do wybranych krajów (podajemy wtedy skróty krajów po przecinku np. pl,en)
Mając przygotowane podstawowe pliki, możemy skupić się na tworzeniu własnej wtyczki w PrestaShop. Na początek zabezpieczę plik przed dostępem z poza sklepu.
<?php
if (!defined('_PS_VERSION_')) {
exit;
}
Kolejnym elementem będzie utworzenie klasy, która rozszerza klasę Module
i konstruktora. Podajemy w nim te same dane co w xml
. Dodajemy jeszcze 2 ważne metody – install
i uninstall
. Pozwolą one nam zainstalować i odinstalować moduł.
class EskimPLXMLProductImporter extends Module
{
public function __construct()
{
$this->name = 'eskimplxmlproductsimporter';
$this->tab = 'front_office_features';
$this->version = '1.0.0';
$this->author = 'Maciej Włodarczak';
$this->need_instance = 0;
$this->ps_versions_compliancy = [
'min' => '1.7',
'max' => _PS_VERSION_
];
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Integracja produktów');
$this->description = $this->l('Integracja produktów');
$this->confirmUninstall = $this->l('Na pewno chcesz odinstalować?');
}
public function install() {
return parent::install();
}
public function uninstall() {
return parent::uninstall();
}
}
Strona z konfiguracją wtyczki
Zanim zaczniemy pisać kod samej wtyczki utworzymy stronę z jej konfiguracją. Wykorzystamy do tego celu dedykowaną metodę getContent()
. Kod zwracany przez metodę powinien być sformatowany w HTML-u i zostanie on wyświetlony w menu konfiguracji wtyczki dostępnym na liście zainstalowanych dodatków. PrestaShop udostępnia klasę, która ułatwia generowanie odpowiednio sformatowanego formularza oraz zapisze dane pod wskazaną nazwą.
public function getContent()
{
$form = [
'form' => [
'legend' => [
'title' => $this->l('Ustawienia'),
],
'input' => [
[
'type' => 'text',
'label' => $this->l('Adres do pliku XML'),
'name' => 'ESKIMPLXMLPRODUCTSIMPORETER_CONFIG',
'size' => 20,
'required' => true,
],
],
'submit' => [
'title' => $this->l('Zapisz'),
'class' => 'btn btn-default pull-right',
],
],
];
$helper = new HelperForm();
$helper->table = $this->table;
$helper->name_controller = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->currentIndex = AdminController::$currentIndex . '&' . http_build_query(['configure' => $this->name]);
$helper->submit_action = 'submit' . $this->name;
$helper->default_form_language = (int) Configuration::get('PS_LANG_DEFAULT');
$helper->fields_value['ESKIMPLXMLPRODUCTSIMPORETER_CONFIG'] = Tools::getValue('ESKIMPLXMLPRODUCTSIMPORETER_CONFIG', Configuration::get('MYMODULE_CONFIG'));
return $helper->generateForm([$form]);
}
…ciąg dalszy nastąpi… dokumentacja modułów PrestaShop modules :: PrestaShop Developer Documentation