0

我在magento中有一个需要覆盖的代码,代码可以在/app/code/core/Mage/Core/Model/Config/Options.php中找到。

代码是这样的:

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.'default_media';
        $this->_data['skin_dir']    = $root.DS.'skin';
        $this->_data['var_dir']     = $this->getVarDir();
        $this->_data['tmp_dir']     = $this->_data['var_dir'].DS.'tmp';
        $this->_data['cache_dir']   = $this->_data['var_dir'].DS.'cache';
        $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';
       }

我需要更改默认媒体,每个商店都有自己的媒体文件夹。所以我做了功能...

public function getMediaFromStore(){
    $fullMediaUrl=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
    $baseUrl = Mage::getBaseUrl();
    echo substr(Mage::getBaseUrl($fullMediaUrl, strlen($baseUrl));
}

而不是,而不是

$this->_data['media_dir']   = $root.DS.'default_media';

我放

$this->_data['media_dir']   = $root.DS.$this->getMediaFromStore();

我得到了可怕的错误,就像这样......

致命错误:在第 328 行的 /home/cofamedia/www/magento/app/Mage.php 中的非对象上调用成员函数 getOptions()

我被困住了,你们中的任何人都对如何解决这个错误有一些解释吗?并为 Magento 中的每个媒体文件夹执行每个存储。谢谢你。

4

1 回答 1

0

这是一个非常棘手的改变。如果您需要在核心类中实现此更改,最好将文件复制到app/code/local/Mage/Core/Model/Config/Options.php并在那里进行更改以防止在升级中被覆盖.

但是,我认为在 CMS WYSIWYG 建模中实施更改以添加存储路径会更好。我不确定您需要寻找并可能改变行为和价值观的所有地方,但是您例如可以从Mage_Cms_Helper_Wysiwyg_Images::getStorageRoot().

请注意,写入和读取存储的路径(文件系统路径)与前端所需的路径(URL 路径)不同。您当前的示例是尝试将后者用于前者,除非您对文件操作和 URL 包装器有一些疯狂的事情,否则它将无法正常工作。

于 2013-06-03T13:38:34.780 回答