Как добавить JavaScript в back-office (админку) PrestaShop с помощью модуля?

0 голосов
Как правильно добавить JavaScript в back-office (админку) PrestaShop с помощью модуля?
спросил 05 Ноя от zapalm (184 баллов) в категории Программирование

1 Ответ

0 голосов

В большинстве случаев для этого нужно использовать хук actionAdminControllerSetMedia(). Пошаговая инструкция:

1) Зарегистрировать хук при инсталляции модуля.

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

    // Регистрируем хук после установки модуля
    if (!$this->registerHook('actionAdminControllerSetMedia')) {
        return false;
    }

    return true;
}

2) Теперь добавляем JavaScript файл.

public function hookActionAdminControllerSetMedia()
{
    // Подключает jQuery и его некоторые зависимости, нужные для PrestaShop
    $this->context->controller->addJquery();

    // Подключает ваш JavaScript
    $this->context->controller->addJS($this->_path . 'views/js/example.js');
}

Есть несколько способов и методов, которые могут быть использованы для регистрации ресурсов (файлов JavaScript и CSS) в back-office (админке). Методы (перечислены в порядке их запуска):

  1. Хук hookDisplayBackOfficeHeader()
  2. Метод контроллера AdminControllerCore::setMedia()
  3. Хук actionAdminControllerSetMedia()
  4. Метод модуля Module::getContent()
  5. Хук hookDisplayBackOfficeFooter()

Лучший способ добавить inline-код - это использовать хук hookDisplayBackOfficeFooter(). Например:

public function hookDisplayBackOfficeFooter()
{
    return '
        <script type="text/javascript">
            var EXAMPLE_VARIABLE = "Привет, Zapalm!";
        </script>
    ';
}

Замечание: В PrestaShop 1.7, если нужно добавить внешний ресурс, например, с сайта https://ajax.googleapis.com, то нужно использовать метогд $this->context->controller->registerJavascript() с опцией 'server' => 'remote'. Например:

$this->context->controller->registerJavascript(
    'three.js',
    'https://ajax.googleapis.com/ajax/libs/threejs/r84/three.min.js',
    ['position' => 'bottom', 'priority' => 100, 'server' => 'remote']
);

Документация на английском языке по теме: Asset management in PrestaShop 1.7.

ответил 05 Ноя от zapalm (184 баллов)
Добро пожаловать на сайт. Здесь можно задавать вопросы по CMS PrestaShop и получать на них ответы.