我试图覆盖Prestashop中的模块,但是没有出现更改。
我已经覆盖了模板文件和控制器,因此我添加了以下文件:
\倍率\模块\ blockwishlist \视图\模板\前\ mywishlist.tpl
\倍率\模块\ blockwishlist \控制器\前\ mywishlist.php
这些是非常简单的更改,我将另一列添加到包含按钮的表中。单击该按钮时,控制器将生成CSV文件。
知道为什么这些变化没有显示出来?
注意:我已打开“强制编译”并转为缓存。
修改: 重新覆盖控制器是:
class BlockWishListMyWishListModuleFrontController extends BlockWishListMyWishListModuleFrontControllerCore // extends ModuleFrontController
或
class BlockWishListMyWishListModuleFrontControllerOverride extends BlockWishListMyWishListModuleFrontController
答案 0 :(得分:1)
Dispatcher
中的
// Dispatch module controller for front office
case self::FC_MODULE :
$module_name = Validate::isModuleName(Tools::getValue('module')) ? Tools::getValue('module') : '';
$module = Module::getInstanceByName($module_name);
$controller_class = 'PageNotFoundController';
if (Validate::isLoadedObject($module) && $module->active) {
$controllers = Dispatcher::getControllers(_PS_MODULE_DIR_.$module_name.'/controllers/front/');
if (isset($controllers[strtolower($this->controller)])) {
include_once(_PS_MODULE_DIR_.$module_name.'/controllers/front/'.$this->controller.'.php');
$controller_class = $module_name.$this->controller.'ModuleFrontController';
}
}
$params_hook_action_dispatcher = array('controller_type' => self::FC_FRONT, 'controller_class' => $controller_class, 'is_module' => 1);
break;
我们看到控制器在没有覆盖的情况下加载,但是从代码下面的另一端我们看到钩子执行:
// Loading controller
$controller = Controller::getController($controller_class);
// Execute hook dispatcher
if (isset($params_hook_action_dispatcher)) {
Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
}
所以一个可能的解决方案(没有覆盖核心类):
how to override module并希望您拥有核心版本> = 1.6.0.11
在blockwishlist.php
方法的install()
方法中添加
this->registerHook('actionDispatcher')
使用其他钩子进行调整,因此它看起来像... !this->registerHook('actionDispatcher') || ...
,因为默认情况下此挂钩未注册,我们无法将模块放在那里。
创建方法(不能在这里美化代码)
public function hookActionDispatcher($params)
{
if ('blockwishlistmywishlistModuleFrontController' == $params['controller_class']) {
include_once(_PS_OVERRIDE_DIR_ . 'modules/' . $this->name . '/controllers/front/mywishlist.php');
$controller = Controller::getController('BlockWishListMyWishListModuleFrontControllerOverride');
}
}
您已通过此路径获得override/modules/blockwishlist/controllers/front/mywishlist.php
个文件
重新安装模块。
它有效!
更多关于覆盖docs
中的某些行为答案 1 :(得分:0)
原来,要覆盖您不放置文件的模块:
〜/重写/模块/ MODULE_NAME
而是将其放入:
〜/主题/ MY_THEME /模块/ MODULE_NAME
现在变化正在展现出来。
有人知道模块是否/何时自动更新,我的更改是否会丢失/覆盖?