php 如何在cs-cart中覆盖控制器

gupuwyp2  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(86)

有时你需要覆盖cs-cart中的默认控制器行为。但是你不能像在钩子中那样使用override修饰符。
我们可以使用哪些方法来覆盖默认控制器?

omtl5h9j

omtl5h9j1#

我发现的最简单的方法是从fn.control.php文件使用dispatch_assign_template钩子。
1.在插件的init.php文件中定义钩子。
1.在插件的func.php文件中添加下一个函数

function fn_myaddon_dispatch_assign_template($controller, $mode, $area, &$controllers_cascade) {
    if ($controller !== 'categories' || $mode !== 'view') {
        return;
    }

    //excluded default categories controller 
    $default_controller_path  = DIR_ROOT . '/app/controllers/frontend/categories.php';
    
    $controllers_cascade = array_filter(
        $controllers_cascade,
        static function ($item) use ($default_controller_path) {
            return $default_controller_path !== $item;
        }
    );
}
  • 我们通过引用传递&$controllers_cascade参数。
  • 我们从$controllers_cascade数组中排除了默认控制器。

1.添加您自己的控制器,如categories.post.php并添加

if ($mode == 'view') {
    //your code here.
}

相关问题