我正在尝试使用backOfficeHeader
挂钩使用模块在prestashop admin中添加javascript文件但没有任何反应。我的代码如下。
public function install()
{
if (!parent::install()
|| !$this->registerHook('backOfficeHeader'))
return false;
return parent::install() &&
$this->registerHook('backOfficeHeader');
}
public function hookBackOfficeHeader() {
$this->context->controller->addJS(_MODULE_DIR_.$this->module->name.'js/hs_custom.js');
}
答案 0 :(得分:3)
如果您使用PS 1.5或1.6,则应使用hook“actionAdminControllerSetMedia”。
您的模块安装程序应检查使用的prestashop版本,然后注册所需的挂钩。
if (version_compare(substr(_PS_VERSION_, 0, 3), '1.5', '<'))
$this->registerHook('BackOfficeHeader');
else
$this->registerHook('actionAdminControllerSetMedia');
然后你需要在每个钩子上以其版本格式添加JS: PS&GT; = 1.5
public function hookActionAdminControllerSetMedia($params) {
$this->context->controller->addJS($this->_path.'views/js/hs_custom.js');
}
PS&LT = 1.4
public function hookBackOfficeHeader($params) {
Tools::addJS($this->_path.'views/js/hs_custom.js');
}
答案 1 :(得分:0)
您是否尝试检查addJS路径?我认为如果其他JS文件正常工作,则无法做到更多。 尝试使用$ this-&gt; _path。
$this->context->controller->addJS($this->_path.'views/js/hs_custom.js');
1)输出路径并检查其是否有效。 2)重新加载页面并检查网络。页面加载您的脚本与否? 3)如果你用挂钩改变东西,请记得重置模块。 4)检查模块挂钩。
答案 2 :(得分:0)
您犯了几个错误。
这是对属性$this->module->name
的无效访问。必须为$this->name
。即,生成JavaScript路径的正确代码是:
_MODULE_DIR_ . $this->name . '/js/hs_custom.js'
或根据建议:
$this->_path . 'js/hs_custom.js'
您还完成了模块和挂钩的双重安装。
您可以使用钩子BackOfficeHeader
,但最好使用钩子ActionAdminControllerSetMedia
。
这是详细信息how to register JavaScript in a back-office (in admin pages) 。
答案 3 :(得分:0)
我也遇到了这个问题,没有错误和警告,所有语法都是正确的。但是找不到我的js文件。 我终于找到了原因。就我而言,JS文件中没有任何内容,系统会传递此文件,该文件始终不包含任何内容。
答案 4 :(得分:-1)
对我来说,“this-&gt; _path”不起作用。我的解决方案是使用 $ _ SERVER ['DOCUMENT_ROOT']
public function hookActionAdminControllerSetMedia($params)
{
// add necessary javascript to products back office
if($this->context->controller->controller_name == 'AdminProducts' && Tools::getValue('id_product'))
{
$this->context->controller->addJS($_SERVER['DOCUMENT_ROOT']."/modules/apl/views/js/jquery.ui.touch-punch.min.js");
}
}