我有一个我需要覆盖的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中的每个媒体文件夹做每个商店。谢谢。
答案 0 :(得分:0)
这是一个非常棘手的变化。 如果您需要在核心类中实现此更改,最好将文件复制到 app / code / local / Mage / Core / Model / Config / Options。 php 并在那里进行更改以防止在升级中覆盖。
但是,我认为最好在CMS WYSIWYG建模中实现更改以添加商店路径。我不确定您需要查找的所有地方。可能会改变行为和值,但您可以在Mage_Cms_Helper_Wysiwyg_Images::getStorageRoot()
中开始。
请注意,写入和读取存储的路径(文件系统路径)与前端(URL路径)所需的路径不同。你当前的例子是尝试将后者用于前者,除非你有一些hella疯狂的文件操作和URL包装器,否则它将无法工作。