Создать переменную, доступную через все шаблоны в PrestaShop

Я понял, что если я хочу сделать свою собственную переменную шаблона в PrestaShop, я буду использовать такой код:

$this->context->smarty->assign( 'varName', 'varValue' );

Я также понял, что правильный способ добавить это - поместить его в контроллер... и все работает...

Чего я не могу понять, так это того, как сделать это в одном месте, но при этом иметь доступ к переменной шаблона во ВСЕХ шаблонах (файлы .tpl моей темы)?

PS: добавление его ко всем контроллерам кажется излишним... Я пытался найти его в Google, но, похоже, я ввожу неверные ключевые слова для поиска...


person jave.web    schedule 22.08.2015    source источник


Ответы (2)


Итак, я нашел решение.

Что вы хотите сделать, так это поместить определение вашей переменной в какой-то «общий» контроллер — для внешнего интерфейса это FrontController. Лучший способ отредактировать основной файл — сделать переопределение, поэтому я покажу вам все, что вам нужно сделать, учитывая PrestaShop 1.6:

  1. Создайте файл с именем FrontController.php и поместите его в override/classes/controller

  2. Создайте содержимое этого файла. Удобным методом переопределения является initHeader(), потому что переменная будет доступна в header.tpl и во всех шаблонах, которые ее используют
    (проверено в header.tpl и index.tpl).

Содержание override/classes/controller/FrontController.php:

class FrontController extends FrontControllerCore {
    public function initHeader(){
        //create your variable
        self::$smarty->assign('yourVariable', 'valueOfYourVariable');

        //call original method, to maintain default behaviour:
        return parent::initHeader();
    }
}
  1. Загрузите переопределение => перейдите в каталог cache (из корня магазина) и отредактируйте файл с именем class_index.php:

    • find array with key "FrontController" (search for 'FrontController' or "FrontController")
    • в этом массиве измените "WHATEVER" в 'path' => 'WHATEVER',
      на override/classes/controller/FrontController.php, чтобы получить:
      'path' => 'override/classes/controller/FrontController.php',
  2. Свободно используйте свою переменную в файлах шаблонов как {$yourVariable}

Ссылка: http://doc.prestashop.com/display/PS16/Overriding+default+behaviors

person jave.web    schedule 22.08.2015

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

public function hookHeader($params)
{
    $this->smarty->assign(array('var1' => 'value 1', 'var2' => 'value 2', 'var3' => 'value 3',));
}
person Gofenice Technologies    schedule 27.08.2015
comment
Это хороший момент (так что +1), но понимаю, что я не хочу создавать модуль, когда создаю базовые представления темы... :) - person jave.web; 29.08.2015