Навигация keyboard_arrow_down

Блог Rss rss_feed

Полный гид по виджетам в PrestaShop: что это такое и как ими пользоваться

Полный гид по виджетам в PrestaShop: что это такое и как ими пользоваться

В мире электронной коммерции гибкость и возможность адаптации функций на сайте играют важную роль. С введением виджетов в PrestaShop 1.7, разработчики получили мощный инструмент для улучшения взаимодействия с пользователями. Эта статья посвящена тому, что такое виджеты, как они работают и почему их использование может существенно упростить процесс разработки модулей и настройки интерфейса.

Что такое виджеты?

Виджеты — это продвинутая концепция, расширяющая функциональность хуков в PrestaShop. В отличие от базовых хуков, которые ограничиваются выводом контента в строго определённые места шаблона, виджеты позволяют разработчикам модулей отображать контент в любых местах, где это необходимо.

Ограничения хуков

При использовании хуков, если модуль хочет показать дополнительный контент в нескольких местах, ему нужно регистрировать и реализовывать все возможные хуки. Это требует значительных усилий и часто приводит к дублированию кода. Виджеты решают эту проблему, позволяя модулю быть более универсальным и адаптивным.

Как использовать виджеты?

Чтобы модуль стал совместимым с виджетами, разработчикам нужно выполнить несколько простых шагов.

1. Реализация интерфейса

Первым делом необходимо реализовать интерфейс PrestaShop\PrestaShop\Core\Module\WidgetInterface. Это подтверждает, что ваш модуль поддерживает функциональность виджетов.

2. Объявление обязательных методов

После реализации интерфейса требуется объявить два метода:

  • renderWidget($hookName, array $configuration): Этот метод отвечает за генерацию представления виджета, позволяя получать необходимые данные и отображать шаблон.
  • getWidgetVariables($hookName, array $configuration): Этот метод возвращает переменные, которые будут переданы в шаблон Smarty.

Параметры обоих методов идентичны и позволяют адаптировать поведение модуля в зависимости от переданного хука.

Пример кода

Вот пример реализации модуля с виджетами:

<?php if (!defined('_PS_VERSION_')) { exit; } use PrestaShop\PrestaShop\Core\Module\WidgetInterface; class MyModule extends Module implements WidgetInterface { public function __construct() { $this->name = 'mymodule'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->author = 'Firstname Lastname'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.7', 'max' => _PS_VERSION_ ]; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('My module'); $this->description = $this->l('Description of my module.'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); } public function renderWidget($hookName, array $configuration) { $this->smarty->assign($this->getWidgetVariables($hookName, $configuration)); return $this->fetch('module:'.$this->name.'/views/templates/widget/mymodule.tpl'); } public function getWidgetVariables($hookName , array $configuration) { $myParamKey = $configuration['my_param_key'] ?? null; return [ 'my_var1' => 'my_var1_value', 'my_var2' => 'my_var2_value', 'my_var_n' => 'my_var_n_value', 'my_dynamic_var_by_param' => $this->getMyDynamicVarByParamKey($myParamKey), ]; } public function getMyDynamicVarByParamKey(string $paramKey) { if($paramKey === 'my_param_value') { return 'my_dynamic_var_by_my_param_value'; } return null; } }

Вызов виджетов

После того как модуль реализовал метод renderWidget(), есть два способа его вызова:

  1. С помощью хуков:

    • Вызов хуков можно осуществлять через PHP-класс: Hook::exec($hook_name) или в шаблоне Smarty: {hook h='<hook_name>'}.
  2. С помощью виджетов:

    • Вызов функции renderWidget() может быть выполнен напрямую из шаблона Smarty:
    {widget name='<module_name>'}

    или с указанием имени хука:

    {widget name='<module_name>' hook='<hook_name>'}

Виджеты в PrestaShop открывают новые горизонты для разработчиков, предоставляя гибкие и мощные инструменты для создания адаптивного контента. Они упрощают процесс интеграции модулей и улучшают опыт пользователей. Используя виджеты, можно значительно ускорить разработку и повысить эффективность работы с контентом.

Как вам виджеты? Пробовали ли вы их использовать в своих проектах? Поделитесь своим мнением в комментариях!

Был ли этот пост полезен для вас?

    
На данный момент комментариев нет
close

Checkout

close

Избранное