有时你需要覆盖cs-cart中的默认控制器行为。但是你不能像在钩子中那样使用override修饰符。我们可以使用哪些方法来覆盖默认控制器?
override
omtl5h9j1#
我发现的最简单的方法是从fn.control.php文件使用dispatch_assign_template钩子。1.在插件的init.php文件中定义钩子。1.在插件的func.php文件中添加下一个函数
fn.control.php
dispatch_assign_template
init.php
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并添加
categories.post.php
if ($mode == 'view') { //your code here. }
1条答案
按热度按时间omtl5h9j1#
我发现的最简单的方法是从
fn.control.php
文件使用dispatch_assign_template
钩子。1.在插件的
init.php
文件中定义钩子。1.在插件的
func.php
文件中添加下一个函数&$controllers_cascade
参数。$controllers_cascade
数组中排除了默认控制器。1.添加您自己的控制器,如
categories.post.php
并添加