繁体   English   中英

Magento通过网站/商店加载模块

[英]Magento load modules by website/store

我正在一个已经开设了一个商店的网站上工作,并且正在尝试使第二个商店/网站正常工作。

新的网站有一个模板,其中包含一些观察者,即使我通过“ 系统”->“配置”->“高级”禁用了这些模块,因为这仅禁用了模块输出,而不是实际的模块,因此,如果有任何观察者,它们仍将被加载并将会跑。

在线搜索,没有找到完整的解决方案。 一篇文章中 ,用户Eric Hainer提出了一种解决方案,该解决方案允许通过检查$ _SERVER ['MAGE_RUN_CODE']变量来加载模块,但是如果您具有活动的高速缓存(如在加载包含模块的存储区时那样),则此方法不起作用会将它们放入缓存中。

所以我的解决方案是修改文件app / code / core / Mage / Core / Model / Config / Options.php以根据存储将缓存保存在不同的文件夹中

首先,我将文件复制到app / code / local / Mage / Core / Model / Config / Options.php,以避免更改核心文件

并在构造函数上添加了以下行

//custom code to save cache on different folders per website
$runCode = (isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : 'default');
$this->_data['cache_dir']   = $this->_data['var_dir'].DS.'cache'.$runCode;

这是构造函数的样子

protected function _construct()
{
    $appRoot= Mage::getRoot();
    $root   = dirname($appRoot);

    $this->_data['app_dir']     = $appRoot;
    $this->_data['base_dir']    = $root;
    $this->_data['code_dir']    = $appRoot.DS.'code';
    $this->_data['design_dir']  = $appRoot.DS.'design';
    $this->_data['etc_dir']     = $appRoot.DS.'etc';
    $this->_data['lib_dir']     = $root.DS.'lib';
    $this->_data['locale_dir']  = $appRoot.DS.'locale';
    $this->_data['media_dir']   = $root.DS.'media';
    $this->_data['skin_dir']    = $root.DS.'skin';
    $this->_data['var_dir']     = $this->getVarDir();
    $this->_data['tmp_dir']     = $this->_data['var_dir'].DS.'tmp';
    //custom code to save cache on different folders per website
    $runCode = (isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : 'default');
    $this->_data['cache_dir']   = $this->_data['var_dir'].DS.'cache'.$runCode;
    $this->_data['log_dir']     = $this->_data['var_dir'].DS.'log';
    $this->_data['session_dir'] = $this->_data['var_dir'].DS.'session';
    $this->_data['upload_dir']  = $this->_data['media_dir'].DS.'upload';
    $this->_data['export_dir']  = $this->_data['var_dir'].DS.'export';
}

这可以完成工作,但是存在一些问题:

  • 清除缓存可能无法正常工作
  • 由于我们从核心复制了此文件,因此更新不会自动应用

还有其他方法吗?

这篇文章在这里继续

在高级下禁用后端中每个存储的模块输出。 然后编辑您的模块观察器功能,并检查该配置以禁用完整的模块功能:

if(Mage::getStoreConfigFlag('advanced/modules_disable_output/YOUR_MODULE'))
    return false;

大多数社区模块已经具有自己的配置来启用/禁用每个商店的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM