php - Prestashop 1.6自定义模块: addJS/addCSS don't work properly

标签 php module hook prestashop-1.6

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

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() 来添加标题元素。一旦完成此 Hook , header 就会构建并且无法更改。

因此,当调用钩子(Hook) 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() 中删除这些行。

关于php - Prestashop 1.6自定义模块: addJS/addCSS don't work properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214672/

相关文章:

PHP - 关注通过网站运行 bash 脚本

php - 正确 MySql 查询的 PDO 异常

php - 仅声明一次 Use "Namespace"初始化并且所有文件都为对象获得相同的命名空间

java - 如何在 Play Framework 2.0 中贡献模块?

perl - 在 Perl 中,如何确定已加载的特定模块的模块版本?

c++ - Winsock recv hooking with Detours

java - 不合规 JVM 不发送 WindowClosing 事件的解决方法

java - Cucumber 类扩展步骤定义和 Hook

php - 如何使用 PHP password_hash 函数对数据库中的所有密码进行哈希处理

导入 sqlite3 驱动程序时出现问题