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

Nat*_*ael 2 php hook module prestashop-1.6

我创建了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');
}
Run Code Online (Sandbox Code Playgroud)

不包括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";
Run Code Online (Sandbox Code Playgroud)

结果是:所有css / js文件都出现在页面开始之前(<body>紧随在之后),但是我的文件出现在显示form_model.tpl之前。

请,如何使我的文件及时被调用?

Flo*_*tre 5

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

构建页面标题时,将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');
}
Run Code Online (Sandbox Code Playgroud)

并从中删除这些行hookDisplayTopColumn()