2015-11-15 104 views
0

我正在嘗試覆蓋Prestashop中的某個模塊,但這些更改未出現。覆蓋Prestashop模塊更改不可見

我已經覆蓋了其中一個模板文件和一個控制器,所以我增加了以下文件:

\覆蓋\模塊\ blockwishlist \意見\模板\前\ mywishlist.tpl
\覆蓋\模塊\ blockwishlist \ controllers \ front \ mywishlist.php

這些是非常簡單的更改,其中我將另一列添加到包含按鈕的表中。點擊按鈕時,控制器將生成一個CSV文件。

任何想法爲什麼這些更改只是沒有顯示?

注意:我打開了「強制編譯」並開啓了緩存。

編輯: 重新overridding控制器是:

class BlockWishListMyWishListModuleFrontController extends BlockWishListMyWishListModuleFrontControllerCore // extends ModuleFrontController 

class BlockWishListMyWishListModuleFrontControllerOverride extends BlockWishListMyWishListModuleFrontController 

回答

1

好吧,我做了一些代碼研究(也許THRE爲存在的最簡單的方法,不知道) so:

代碼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. how to override module,希望你有核心版本> = 1.6.0.11

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

    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

    +0

    感謝您的答案,但它沒有奏效。我已經對我的問題進行了編輯,重新覆蓋了控制器,這是正確的方法? –

    +0

    感謝您的編輯。你想,如果我只是把控制器類的'〜/重寫/模塊/ .....'目錄,它將工作 - 而不必你有什麼建議? –

    +0

    你可以嘗試將看到的結果(我認爲 - 不) –

    0

    壓倒一切的一些行爲事實證明重寫你不模塊放置在您的文件:

    〜/重寫/模塊/ MODULE_NAME

    取而代之的是將其置於:

    〜/主題/ MY_THEME /模塊/ MODULE_NAME

    現在變化表現自己。

    有誰知道是否/何時模塊自動更新,將我的變化迷路/ overrwritten?

    +0

    文件主題文件夾不會在模塊更新overrwritten,但你肯定控制器類是通過將mywishlist.php文件中有重寫? –