Связать внешний JS-файл с Prestashop

Связать внешний JS-файл с Prestashop

28.05.2018 04:20:12 Просмотров 25 Источник

Я создаю пользовательский модуль в 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

Является ответом!
ébewè

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;

Весь крюк не будет вызван, если модуль отключен.

https://stackoverflow.com/questions/50567458/link-external-js-file-to-prestashop/50578563#comment88168916_50578563
Спасибо! Где я могу получить отличную документацию о Prestashop и его версиях? Я хотел бы найти doc для контекстной переменной и значений, но он, похоже, обесценивается.
https://stackoverflow.com/questions/50567458/link-external-js-file-to-prestashop/50578563#comment88172267_50578563
В зависимости от того, что вы ищете, вы можете найти информацию здесь doc.prestashop.com или здесь developers.prestashop.com
Alexander Grosul

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();

Maksim T.

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.

Закрыть X