Как да създадем свой модул за Prestashop 1.7.8

Създаването на модул за Prestashop 1.7.8 може да бъде предизвикателно за нови разработчици, но едновременно с това е и изключително полезен начин да добавите допълнителни функционалности към магазина си. В тази статия ще ви покажа как да създадете модул за блок с най-продавани продукти в текущата категория, като предоставяме примерен код и пътища до директориите.

Стъпка 1: Създаване на модула За да създадем модула, трябва да създадем нова директория във вашия Prestashop 1.7.8 магазин в папката /modules. Директорията трябва да се казва bestsellersincategory, както и да съдържа следните файлове:

  1. config.xml – този файл съдържа информация за модула, включително името му, версията, описание и др.
  2. bestsellersincategory.php – това е основният файл на модула, който ще съдържа логиката на модула.
  3. index.php – това е файлът, който ще се зарежда, когато модулът се използва в магазина.

Стъпка 2: Код на модула. След като сме създали необходимите файлове, можем да преминем към кода на модула. В този пример, ще създадем блок с най-продавани продукти в текущата категория.

  • config.xml:
<module>
    <name>Bestsellers in category</name>
    <version>1.0</version>
    <description>Show bestsellers in current category</description>
    <author>your_name</author>
    <tab>front_office_features</tab>
    <need_instance>0</need_instance>
    <bootstrap>1</bootstrap>
</module>
  • bestsellersincategory.php:
<?php
if (!defined('_PS_VERSION_')) {
    exit;
}

class BestsellersInCategory extends Module
{
    public function __construct()
    {
        $this->name = 'bestsellersincategory';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'Your Name';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Bestsellers in current category');
        $this->description = $this->l('Adds a block with bestsellers in current category.');
    }

    public function install()
    {
        if (!parent::install()
            || !$this->registerHook('displayLeftColumn')
            || !$this->registerHook('displayRightColumn')
            || !$this->registerHook('displayHomeTabContent')
        ) {
            return false;
        }

        return true;
    }

    public function uninstall()
    {
        if (!parent::uninstall()) {
            return false;
        }

        return true;
    }

    public function hookDisplayLeftColumn($params)
    {
        return $this->getBestsellersInCategory($params);
    }

    public function hookDisplayRightColumn($params)
    {
        return $this->getBestsellersInCategory($params);
    }

    public function hookDisplayHomeTabContent($params)
    {
        return $this->getBestsellersInCategory($params);
    }

    public function getBestsellersInCategory($params)
    {
        if (!$this->active) {
            return;
        }

        $category = new Category((int) $params['category']->id);
        $best_sellers = $category->getBestSales();
        $products = [];

        foreach ($best_sellers as $best_seller) {
            $products[] = new Product((int) $best_seller['id_product'], false, $params['cookie']->id_lang);
        }

        $this->context->smarty->assign([
            'products' => $products,
            'title' => $this->l('Bestsellers in category'),
        ]);

        return $this->display(__FILE__, 'bestsellersincategory.tpl');
    }
}

Трябва добавим и шаблон за блока, който да се показва на фронтенда на магазина. За да го направим, създайте нова папка “views/templates/hook” в директорията на модула и в нея създайте нов файл “bestsellersincategory.tpl”. В този файл ще добавим HTML код за визуализация на блока.

Във файла “bestsellersincategory.tpl” можем да използваме Smarty шаблони за да извършваме нужните действия. Например, можем да използваме цикъл, за да изведем списък с най-продаваните продукти:

{if $products}
	<h3>Най-продавани продукти:</h3>
	<ul>
		{foreach $products as $product}
			<li><a href="{$product.link}">{$product.name}</a></li>
		{/foreach}
	</ul>
{else}
	<p>Няма продукти.</p>
{/if}

Този код проверява дали има продукти и ако има, генерира HTML код за списък с продуктите. Ако няма продукти, генерира съобщение, че няма намерени продукти.

Сега трябва да свържем шаблона с контролера. За да направим това, редактирайте файла “BestSellersInCategory.php” и добавете следния код в метода “renderWidget”:

$this->context->smarty->assign(array(
	'products' => $this->getBestSellers(),
	'category_name' => $category_name,
));

return $this->display(__FILE__, 'views/templates/hook/bestsellersincategory.tpl');

Тук използваме метода “assign” на Smarty обекта, за да изпратим променливи към шаблона. Предаваме списък с най-продаваните продукти, който вече сме получили в метода “getBestSellers”, и името на текущата категория. След това използваме метода “display” на контролера, за да заредим шаблона и да го покажем на фронтенда.

Сега, когато вече имаме модула ни, можем да го инсталираме в нашия магазин Prestashop.

  1. Отидете в административния панел на магазина си.
  2. Отидете в раздела “Модули и услуги”.
  3. Кликнете върху бутона “Качване на модул” в горния десен ъгъл на страницата.
  4. Изберете файла на модула (bestsellersincategory.zip), който сме създали по-рано и го качете.
  5. Инсталирайте модула, като кликнете върху бутона “Инсталирай” до името на модула.
  6. Модулът сега е инсталиран и може да го конфигурирате като отидете в раздела “Модули и услуги” -> “Модули и услуги” -> “Други модули” -> “Bestsellers в текущата категория” и кликнете върху “Конфигуриране”.

Това е! Сега имате свой модул за блок с най-продавани продукти в текущата категория във вашия магазин Prestashop 1.7.8.