簡體   English   中英

覆蓋Prestashop模塊更改不可見

[英]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. 如何覆蓋模塊並希望您的核心版本> = 1.6.0.11

  2. install()方法中的blockwishlist.php中添加

    this->registerHook('actionDispatcher')

可以和其他鈎子一起使用,所以看起來就像... !this->registerHook('actionDispatcher') || ... ... !this->registerHook('actionDispatcher') || ...因為此鈎子在默認情況下未注冊,所以我們不能僅將模塊放置在那里。

  1. 創建方法(此處無法美化代碼)

    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'); } }

  2. 您已經通過此路徑具有override/modules/blockwishlist/controllers/front/mywishlist.php文件

  3. 重新安裝模塊。

  4. 有用!

有關覆蓋文檔中某些行為的更多信息

事實證明,要覆蓋模塊,您不要將文件放在以下位置:

〜/ overrides / module / MODULE_NAME

相反,您將其放置在:

〜/ themes / MY_THEME / modules / MODULE_NAME

現在,變化正在展現出來。

是否有人知道/當模塊自動更新時,我的更改會丟失/覆蓋嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM