PrestaShop modulių kūrimas – įvadas

Modulis yra PHP kodas, kuris praplečia parduotuvės funkcionalumą nepakeičiant branduolio failų. Jis gali:

  • Pridėti naujų funkcijų
  • Keisti dizainą / išvaizdą
  • Integruoti mokėjimo sistemas
  • Siųsti duomenis į išorines sistemas

Modulio struktūra

modules/
└── mano_modulis/
    ├── mano_modulis.php      ← Pagrindinis failas (būtinas)
    ├── config.xml            ← Modulio metaduomenys (neprivalomas)
    ├── logo.png              ← Ikonėlė admin panelėje
    ├── views/
    │   ├── templates/
    │   │   ├── front/        ← Šablonai klientams
    │   │   └── admin/        ← Šablonai administracijai
    │   └── css/ / js/
    └── translations/         ← Vertimai

Pagrindinis failas – minimalus pavyzdys

php

<?php
if (!defined('_PS_VERSION_')) exit; // Apsauga

class Mano_Modulis extends Module
{
    public function __construct()
    {
        $this->name    = 'mano_modulis';      // Aplanko pavadinimas
        $this->tab     = 'front_office_features';
        $this->version = '1.0.0';
        $this->author  = 'Vardenis';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Mano modulis');
        $this->description = $this->l('Modulio aprašymas.');
        $this->ps_versions_compliancy = [
            'min' => '1.7',
            'max' => _PS_VERSION_
        ];
    }

    // Įdiegimas
    public function install()
    {
        return parent::install()
            && $this->registerHook('displayHeader');
    }

    // Pašalinimas
    public function uninstall()
    {
        return parent::uninstall();
    }
}

Hook sistema – kaip modulis „kabliaujasi” į parduotuvę

Hook = vieta parduotuvėje, kur modulis gali įterpti savo kodą.

php

// Registruojame hook įdiegimo metu
$this->registerHook('displayHeader');
$this->registerHook('displayHome');
$this->registerHook('actionCartSave');

// Metodas, kuris vykdomas kai hook iššaukiamas
public function hookDisplayHeader($params)
{
    $this->context->controller->addCSS($this->_path . 'views/css/style.css');
    $this->context->controller->addJS($this->_path . 'views/js/script.js');
}

public function hookDisplayHome($params)
{
    return $this->display(__FILE__, 'views/templates/front/home.tpl');
}

Dažniausiai naudojami hook’ai:

HookVieta
displayHeader<head> – CSS/JS įkėlimui
displayHomePagrindinis puslapis
displayFooterApatinė dalis
displayProductAdditionalInfoProdukto puslapis
actionOrderStatusUpdateKai keičiasi užsakymo statusas
actionCartSaveKai keičiamas krepšelis

Smarty šablonas (.tpl failas)

smarty

{* views/templates/front/home.tpl *}
<div class="mano-blokas">
    <h2>{l s='Labas!' mod='mano_modulis'}</h2>
    <p>{$tekstas}</p>
</div>

PHP pusėje perduodame kintamuosius:

php

public function hookDisplayHome($params)
{
    $this->smarty->assign([
        'tekstas' => 'Tai mano pirmasis modulis!'
    ]);
    return $this->display(__FILE__, 'views/templates/front/home.tpl');
}

Konfigūracijos puslapis (admin)

php

public function getContent()
{
    if (Tools::isSubmit('submit_mano_modulis')) {
        Configuration::updateValue(
            'MANO_MODULIS_TEKSTAS',
            Tools::getValue('tekstas')
        );
    }

    $tekstas = Configuration::get('MANO_MODULIS_TEKSTAS');

    return '
        <form method="post">
            <input type="text" name="tekstas" value="' . $tekstas . '">
            <button type="submit" name="submit_mano_modulis">Išsaugoti</button>
        </form>
    ';
}

Greitas startas – pirmi žingsniai

  1. Sukurti aplanką /modules/mano_modulis/
  2. Sukurti pagrindinį .php failą su klase
  3. Eiti į Admin → Moduliai → Įdiegti
  4. Testuoti ir tobulinti

Parašykite komentarą