每个商店都有自己的媒体文件夹?

时间:2013-06-03 12:06:48

标签: magento magento-1.7

我有一个我需要覆盖的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();

我得到了一个怪异的错误,就像这样...

  

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

我被困了,你们有没有解释如何解决这个错误。并为Magento中的每个媒体文件夹做每个商店。谢谢。

1 个答案:

答案 0 :(得分:0)

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

但是,我认为最好在CMS WYSIWYG建模中实现更改以添加商店路径。我不确定您需要查找的所有地方。可能会改变行为和值,但您可以在Mage_Cms_Helper_Wysiwyg_Images::getStorageRoot()中开始。

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