Własny moduł w PrestaShop

W tym artykule opiszę swoje pierwsze starcie z napisaniem prostego modułu w Prestashop 1.7.

Zadanie było następujące: na stronie produktu należy wyświetlić tekst pobrany z opisu kategorii, tak jak pokazano na obrazku poniżej.

Pierwszy krok, to znalezienie miejsca w szablonie, w którym umieścić tekst.
Plik to

szablon/classic/templates/catalog/product.tpl

w okolicach linii 230 dodałem kod:

{if isset($mirekgab1_tpl)}
  {include file="$mirekgab1_tpl"}
{/if}

Powyższy kod sprawdza, czy została ustawiona zmienna $mirekgab1_tpl i jeżeli tak, to dołącza plik, którego nazwa jest zapisana w tej zmiennej.

Dołączany plik wygląda następująco:

<div class="tabs">
  {block name='product_reference'}
      <div class="product-reference">   
      {$product_category_description nofilter}   
      </div>
  {/block}
</div>

W pliku tym zdefiniowałem blok, który ma być wstawiony. W bloku tym wyświetlana jest wartość zmiennej $product_category_description.

Następny krok, to stworzenie modułu, który pobierze tekst z opisu kategorii i ustawi odpowiednie zmienne. Postanowiłem zrobić to w następujący sposób. Ustawiłem hook, który będzie się wykonywał po pobranie właściwości produktu i w funkcji przypisanej do tej akcji pobrać odpowiednie dane.

public function hookActionGetProductPropertiesAfter($params) 
{    
    $id_category_default = $params['product']['id_category_default'];
    $context = $params['context'];
    $id_lang = $params['id_lang'];
    $product_category_description = Db::getInstance()->getValue('SELECT description FROM ' . _DB_PREFIX_ . 'category_lang WHERE id_shop = ' . (int) $context->shop->id . ' AND id_lang = ' . (int) $id_lang . ' AND id_category = ' . $id_category_default);     
    $mymodule_tpl_file = _PS_MODULE_DIR_.$this->name.'/views/templates/front/product-contact.tpl';    
    $context->smarty->assign('mirekgab1_tpl',$mymodule_tpl_file);
    $context->smarty->assign('product_category_description', $product_category_description);
}

Na podstawie parametrów id_category_default, context oraz id_lang pobieram opis kategorii z tabeli category_lang. Następnie pobrany opis przypisuję do zmiennej product_category_description w odpowiednim pliku szablonu.

W ten oto sposób powstał mój pierwszy moduł do Prestashop.

2 komentarze do “Własny moduł w PrestaShop

Możliwość komentowania została wyłączona.