如何在prestashop 1.5中覆盖FrontController?

时间:2013-07-04 13:04:21

标签: controller override prestashop front-controller

我知道有类似的问题,但没有一个能解决我的问题。

我在/ override / classes / controller /

中放置了一个FrontController.php文件

它包含以下代码:

Class FrontController extends FrontControllerCore{
    public function displayHeader(){
        if(!self::$initialized) $this->init();

        $this->context->smarty->assign('test_ok','okok');

        return parent::displayHeader();       
    } 
}//end FrontController

从我的自定义主题,在header.tpl中,我放置了一个像这样的测试代码

{$test_ok}

得到这个:

注意:第147行的[...] / cache / smarty / compile / 81 / a3 / 76 / 81a3760f9c0cb8c9ff677a0e7b59d8962cdaaeda.file.header.tpl.php中的未定义索引:test_ok

注意:尝试在第147行的[...] / cache / smarty / compile / 81 / a3 / 76 / 81a3760f9c0cb8c9ff677a0e7b59d8962cdaaeda.file.header.tpl.php中获取非对象的属性


我还尝试直接在FrontControllerCore.php中分配这个smarty var(仅用于测试),但得到了同样的注意。


有什么想法吗?

3 个答案:

答案 0 :(得分:3)

创建覆盖时,需要重新创建类索引。

为此,只需删除文件/cache/class_index.php然后重新创建它(确保chmod它到666所以Prestashop可以写它(你也可以删除文件的内容当然)。

答案 1 :(得分:1)

在Prestashop 1.5及更高版本中,函数 displayHeader() 不会被称为,因为它被标记为已弃用。因此,当你覆盖一个没有调用的函数时,什么都不会发生,你输出结果就没有了。

正如我在此处所见,来自user1145716的回答对您的情况更有帮助,您可以覆盖 initHeader()功能以查看输出结果。

答案 2 :(得分:0)

小心点!在PS1.5方法中,不推荐使用displayHeader(),所以你必须使用initHeader()然后它才能工作,我遇到同样的问题。