在 Opencart 4.x.x 中通过事件覆盖控制器

问题描述 投票:0回答:1

我正在尝试弄清楚如何覆盖控制器以在 OpenCart 4 中构建自定义主题。显然,文档很丰富,我已经浏览了所有内容,现在我对选择 OpenCart 4 的决定感到非常自豪,迄今为止最好的开源电子商务平台。所以我显然不能反悔这个决定。

除此之外,我尝试使用原始源中提供的 opencart 示例主题插件中的示例来覆盖公共/标头控制器。我之前尝试为该特定控制器设置一个事件,该事件触发良好。在标头覆盖函数中,我尝试更改路线,以便系统将使用我的自定义控制器,但每次运行它时,它都会继续并使用常规的原始控制器。

任何人都可以阐明问题所在吗?在我看来,它应该基于 OpenCart 开发人员为这个新版本提供的非常详细的文档来工作。

现在我正在安装时注册事件:

        $event_data = [
            'code'        => 'oc_pif_theme_example',
            'description' => 'Pif Example theme extension controller override',
            'trigger'     => 'catalog/controller/common/header/before',
            'action'      => 'extension/oc_pif_theme_example/startup/theme_example.header_override',
            'status'      => 1,
            'sort_order'  => 0
        ];

        $this->load->model('setting/event');
        
        $this->model_setting_event->addEvent($event_data);

这是我的 header_override 方法:

public function header_override(string &$route, array &$args): void {

    $override = ['common/header'];

    if (in_array($route, $override)) {
        // Override the route to point to your new controller
        $route = 'extension/oc_pif_theme_example/' . $route;
        $this->log->write('header_override() final route: ' . $route);

    }

}

在扩展/oc_pif_theme_example/catalog/controller/common/header.php 中找到的自定义控制器中,我有带有一些日志记录的索引方法,以检查它是否实际运行并加载树枝文件。

任何可以为我指明正确方向的事情都会受到赞赏。感谢您的意见。

php opencart opencart-3 opencart-module opencart-events
1个回答
0
投票

我也有同样的问题。我将覆盖自定义主题中的默认产品控制器,但我找不到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.