1

我面临着一个奇怪的情况。我正在尝试覆盖购物车控制器,如果我将CartController.php文件放在/override/controllers/front中,我能够成功,如果我将相同的文件放在我的自定义模块中并安装模块,我会失败。模块中文件的路径是myModule/override/controllers/front。文件内容是

class CartController extends CartControllerCore
{
  public function init()
  {
    die('Override');
  }
}

我还注册了一个钩子,它显示正常。

  public function install()
  {
    if (Shop::isFeatureActive())
      Shop::setContext(Shop::CONTEXT_ALL);

    return parent::install() && $this->registerHook('Test');
  }

  public function uninstall()
  {
    if (!parent::uninstall() ||
      !Configuration::deleteByName('MYMODULE_NAME'))
      return false;
    return true;
  }

  public function hookTest($params){

    return $this->display(__FILE__, '/views/templates/hook/testpage.tpl');
  }

我在这里想念什么?

4

2 回答 2

0

我相信你做的一切都很好。安装模块时,模块中的覆盖将复制到覆盖文件夹/文件,除非该类函数已经有另一个覆盖。看到这个答案https://stackoverflow.com/a/24114184

于 2017-01-13T11:33:59.457 回答
0

嗨,好奇的编码器上面提到的都是正确的,但是您错过了如何覆盖相应文件夹中的文件。

在您的购物车自定义模块中编写以下代码以获取覆盖文件。

protected static $overrides = array(
    'controllers/front/CartController.php'
);//Override file name

public function install(){
    if (Shop::isFeatureActive())
    Shop::setContext(Shop::CONTEXT_ALL);
    foreach(self::$overrides as $file){
        $explode = explode("/", $file);
        $file_name = $explode[count($explode)-1];
        unset($explode[count($explode)-1]);
        $folder = implode("/", $explode);
        @mkdir (_PS_OVERRIDE_DIR_.$folder, 0777, true);
        @copy ( _PS_MODULE_DIR_.$this->name.'/override/'.$folder."/".$file_name 
    , _PS_OVERRIDE_DIR_.$folder."/".$file_name );
        $old = @umask(0);
        @chmod (_PS_OVERRIDE_DIR_.$folder."/".$file_name, 0777);
        @umask($old);
    }
    return parent::install() && $this->registerHook('Test');
}
于 2017-05-09T09:17:29.580 回答