2016-10-11 6 views
3

Я создаю магазин на основе PrestaShop (v 1.6), и я хочу зарегистрировать свой настраиваемый плагин-модификатор для доступа из любых шаблонов (в том числе в front и back-officetemplates).Где зарегистрировать глобальный модификатор smarty в PrestaShop?

Вопрос где, чтобы разместить регистрационный код?

Теперь я использую Инструменты класс переопределение, чтобы добавить функцию для обработки модификатора (что является приемлемой практикой в ​​случае хранения конкретных функциональных возможностей, AFAIK) и smarty.config.inc.php зарегистрировать плагин (потому что все плагины PrestaShop зарегистрированы здесь), но этот файл содержит предупреждение о том, что «не изменять файл напрямую», и, насколько я понимаю, будет перезаписан при обновлении PrestaShop.

Итак, вопрос в том, где зарегистрировать мой плагин, чтобы быть уверенным, что мой код не будет перезаписан?

Заранее спасибо.

ответ

3

Вы можете сделать это с помощью модуля.

1. Создайте модуль папку

Внутри модулей создать папку testmodule и внутри создать PHP файл testmodule.php.

Мы будем использовать крючок actionDispatcher, который выполняет после каждого экземпляра контроллера страницы, чтобы зарегистрировать плагин модификатора в smarty.

require_once _PS_MODULE_DIR_ . 'testmodule' . DIRECTORY_SEPARATOR . 'TestClass.php'; 

class TestModule extends Module { 
    public function __construct() 
    { 
     $this->name = 'testmodule'; 
     $this->tab = 'front_office_features'; 
     $this->version = '1.0'; 

     parent::__construct(); 

     $this->displayName = $this->l('Test Module'); 
     $this->description = $this->l('Testing smarty plugins.'); 
    } 

    public function install() 
    { 
     return parent::install() && $this->registerHook('actionDispatcher'); 
    } 

    public function hookActionDispatcher() 
    { 
     /* 
      We register the plugin everytime a controller is instantiated 

      'modifier'       - modifier type of plugin 
      'testToUpper'      - plugin tag name to be used in templates, 
      array('TestClass', 'toUpperMethod') - execute toUpperMethod() from class TestClass when using modifier tag name 
     */ 
     $this->context->smarty->registerPlugin('modifier', 'testToUpper', array('TestClass', 'toUpperMethod')); 
    } 
} 

2. Создать класс, который держит метод Изменявшего

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

class TestClass { 
    public static function toUpperMethod($param) 
    { 
     return strtoupper($param); 
    } 
} 

Установите модуль, и вы можете использовать плагин в любом шаблоне, например, на первых страницах

{$page_name|testToUpper} 

отзовется и преобразование имени страницы в верхний регистр.

Вы можете внести изменения или меры предосторожности в случае, если вы попытаетесь использовать модификатор на массивах, например, но это основа регистрации плагинов smarty.

Не требуется переопределение и отсутствие необходимости в хакерстве.

+0

Большое спасибо, этот крюк действительно хорош для любой инициализации сразу после загрузки контроллера. – AlexandrX

+0

Спасибо, столько! – iamrobert

Смежные вопросы