addJS函数不适用于prestashop中的admin

时间:2015-11-05 09:30:29

标签: prestashop

我正在尝试使用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');
 }

5 个答案:

答案 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");
    }
}