Prestashop 1.6 自定义模块:addJS/addCSS 无法正常工作

Prestashop 1.6 custom module : addJS/addCSS don't work properly

我创建了我的 prestashop 模块,带有一个挂钩来显示我的特定搜索表单。

public function hookDisplayTopColumn($params)
{

    $this->context->controller->addCSS($this->_path.'css/modelfilter.css', 'all');
    $this->context->controller->addJS($this->_path.'js/modelfilter.js');


    $marque = $this->getSubCategories($this->marquesCategory);

    $this->context->smarty->assign(array(
        'marques' => $marque,
    ));
    return $this->display(__FILE__, 'form_model.tpl');
}

JS 和 CSS 文件不包括在内。为了找出原因,我在 classes/controller/FrontController.php 中添加了一个解析行:

public function addMedia($media_uri, $css_media_type = null, $offset = null, $remove = false, $check_path = true)
{
    echo 'addMedia '.$media_uri."<br/>\n";

结果是:所有 css/js 文件都出现在页面开头之前(就在 <body> 之后),但我的文件出现在显示 form_model.tpl[=14= 之前]

请问如何让我的文件在合适的时间被调用?

您不得在 hookDisplayHeader() 之外使用 $this->context->controller->addCSSaddJS

构建页面的 header 时调用 hookDisplayHeader() 添加 headers 元素。完成此挂钩后,header 已构建且无法更改。

所以当钩子 hookDisplayTopColumn() 被调用时,header 已经构建。

要添加文件,您必须在模块中实现 hookDisplayHeader()

public function hookDisplayHeader($params)
{
    $this->context->controller->addCSS($this->_path.'css/modelfilter.css', 'all');
    $this->context->controller->addJS($this->_path.'js/modelfilter.js');
}

并从 hookDisplayTopColumn() 中删除这些行。