[英]Override Prestashop Module Changes not Visible
我試圖覆蓋Prestashop中的模塊,但更改沒有出現。
我已經覆蓋了模板文件和控制器,所以添加了以下文件:
\\ override \\ modules \\ blockwishlist \\ views \\ templates \\ front \\ mywishlist.tpl
\\ override \\ modules \\ blockwishlist \\ controllers \\ front \\ mywishlist.php
這些是非常簡單的更改,其中我向包含按鈕的表中添加了另一列。 單擊按鈕后,控制器將生成CSV文件。
知道為什么這些變化沒有顯示嗎?
注意:我已經打開了“強制編譯”並打開了緩存。
編輯 :重新覆蓋控制器是:
class BlockWishListMyWishListModuleFrontController extends BlockWishListMyWishListModuleFrontControllerCore // extends ModuleFrontController
要么
class BlockWishListMyWishListModuleFrontControllerOverride extends BlockWishListMyWishListModuleFrontController
好的,我做了一些代碼研究(也許這是最簡單的方法,不確定),所以:
在代碼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);
}
所以一種可能的解決方案 (不覆蓋核心類):
如何覆蓋模塊並希望您的核心版本> = 1.6.0.11
在install()
方法中的blockwishlist.php
中添加
this->registerHook('actionDispatcher')
可以和其他鈎子一起使用,所以看起來就像... !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
文件
重新安裝模塊。
有用!
有關覆蓋文檔中某些行為的更多信息
事實證明,要覆蓋模塊,您不要將文件放在以下位置:
〜/ overrides / module / MODULE_NAME
相反,您將其放置在:
〜/ themes / MY_THEME / modules / MODULE_NAME
現在,變化正在展現出來。
是否有人知道/當模塊自動更新時,我的更改會丟失/覆蓋嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.