将外部JS文件链接到Prestashop

时间:2018-05-28 13:20:12

标签: javascript prestashop prestashop-1.7

我正在Prestashop 1.7中创建一个自定义模块,我尝试了很多解决方案,但没有解决我的问题。

我会在安装模块的网站的页眉或页脚中添加一个外部JS文件(仅在安装模块时)。

<script src="https://cdn.monurl.com/file.js"></script> // JS file to include

我尝试在 displayHeader 钩子中使用addJS()方法:

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文件一起使用。我是对的吗?

如何在我的标题(或</body>之前的页脚)中添加外部JS文件?

3 个答案:

答案 0 :(得分:3)

在PrestaShop 1.7中不推荐使用

addJS()功能。您现在必须使用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文件。

您可以在doc:https://developers.prestashop.com/themes/assets/index.html

中找到有关此功能的更多信息

另一个考虑你的代码,你不必把:

if (!$this->active)
    return;

如果模块被禁用,则不会调用整个挂钩。

答案 1 :(得分:1)

对于Prestashop 1.7 *,此方法addJs已过时。使用

$this->context->controller->registerJavascript('cdn', 'https://cdn.monurl.com/file.js', array('media' => 'all', 'priority' => 10, 'inline' => true, 'server' => 'remote'));

其中第一个参数是新脚本的标识符,以避免下一个参数,包括它是否包含一次,第二个参数是媒体文件的路径,最后一个参数是一个数组,其中包含有关新媒体文件的额外信息参数&#39;服务器&#39;指出文件在远程服务器上。顺便说一句,css文件现在使用方法$this->context->controller->registerStylesheet();

包含相同的方式

答案 2 :(得分:0)

  

我只能对内部JS文件使用addJS()方法。我说的对吗?

是的,在PrestaShop 1.7中。

仅获取更多信息。 这是详细信息,how to register JavaScript in a back-office (in admin pages)