Prestashop 1.6自定义模块:addJS/addCSS don';工作不正常


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 之前

请问,如何使我的文件在适当的时候被调用?

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

构建页面的页眉时,会调用hookDisplayHeader()来添加页眉元素。一旦这个钩子完成,就构建了头,并且不能更改。

因此,当调用钩子hookDisplayTopColumn()时,就已经构建了头。

要添加文件,您必须在模块中实现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()中删除这些行。