我创建了我的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->addCSS
和addJS
。
构建页面的页眉时,会调用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()
中删除这些行。