我正在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文件?
答案 0 :(得分:3)
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) 。