Связать внешний JS-файл с Prestashop
Я создаю пользовательский модуль в Prestashop 1.7, и я пробовал много решений, но ничего не решило мою проблему.
Я бы добавил внешний JS-файл в верхний или нижний колонтитул веб-сайта, где установлен модуль (и только тогда, когда он установлен).
<script src="https://cdn.monurl.com/file.js"></script> // JS file to include
Я попытался использовать addJS()
в крючке displayHeader:
public function hookDisplayHeader($params)
{
if (!$this->active)
return;
$this->context->controller->addJS('https://cdn.monurl.com/file.js');
}
public function install()
{
return parent::install() && $this->registerHook('displayHeader');
}
Я сделал много тестов, и функция hookDisplayHeader()
вызывается, но мой JS-файл не отображается в <head>
моей страницы.
Документация Prestashop ограничена, но после многих исследований я думаю, что могу использовать только addJS()
с внутренними файлами JS. Я прав?
Как я должен сделать, чтобы добавить внешний JS-файл в мой верхний колонтитул (или нижний колонтитул перед </body>
)?
Ответы - Связать внешний JS-файл с Prestashop / Link external JS file to Prestashop

29.05.2018 10:21:45
addJS()
устарела в PrestaShop 1.7. Теперь вы должны использовать registerJavascript()
.
$this->context->controller->registerJavascript(
'monurl', // Unique ID
'https://cdn.monurl.com/file.js', // JS path
array('server' => 'remote', 'position' => 'bottom', 'priority' => 150) // Arguments
);
Важным аргументом, который вы не должны забывать здесь, является 'server' => 'remote'
для загрузки внешнего JS-файла.
Вы можете найти дополнительную информацию об этой функции здесь, в документе: https://developers.prestashop.com/themes/assets/index.html
Еще подумайте о своем коде, вам не придется ставить:
if (!$this->active)
return;
Весь крюк не будет вызван, если модуль отключен.



29.05.2018 10:27:19
Этот метод addJs
устарел для Prestashop 1.7*. Воспользуйся
$this->context->controller->registerJavascript('cdn', 'https://cdn.monurl.com/file.js', array('media' => 'all', 'priority' => 10, 'inline' => true, 'server' => 'remote'));
где первый параметр-это идентификатор нового скрипта, чтобы избежать следующего его включения, если он был включен один раз, второй параметр-это путь к медиа-файлу, а последний параметр-это массив с дополнительной информацией о новом медиа-файле, где параметр 'server' указывает, что файл находится на удаленном сервере. Кстати, CSS файлы находятся в том же режиме с методом $this->context->controller->registerStylesheet();

05.11.2018 08:38:01
В PrestaShop 1.7 для страницы фронт-офиса вам нужно использовать другой метод для добавления внешнего JS-файла: registerJavascript
. Но для страницы бэк-офиса вы можете сделать это как обычно.
Так, например, чтобы добавить файл JavaScript на страницу фронт-офиса из https://ajax.googleapis.com
сайт вам нужно использовать новый метод 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']
);
Для добавления CSS-файла можно использовать другой новый метод FrontController: registerStylesheet
.