在不释放命名空间的情况下扩展Mage核心文件

时间:2013-10-11 21:44:07

标签: magento

我想将自己的实体引入特定的Magento模块命名空间,例如我可能希望能够调用

Mage::getModel('catalog/brand')->load(1);

Brand目前不是目录模块中包含的模型。我不想修改核心文件,也不想通过将Mage文件夹添加到本地目录来破解核心。

我在想我的命名空间配置文件中的语法可能与此类似:

<models>
    <catalog>
        <args>
            <modules>
                <AJW_Catalog before="Mage_Catalog">AJW_Catalog</AJW_Catalog>
            </modules>
        </args>
    </catalog>
    <ajw_catalog>
        <class>AJW_Catalog_Model</class>
    </ajw_catalog>
</models>

但它似乎不起作用。 有谁知道如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

也许可以通过一些技巧,但不是官方支持,通常是一个坏主意。您使用的before=语法仅适用于routers节点。没有框架代码可以让你做你想做的事情。此外,Magento框架代码中存在强烈偏向于“拥有”其命名空间/包名称的各个模块。在现有命名空间(catalog)中定义新模型会引入您的代码可能与未来版本的Magento代码冲突的理论可能性。

答案 1 :(得分:0)

这可能是一个可能的解决方案(脑屁) 创建一个名为Customnamespace_Catalog的模块,然后使用默认mage模块中不存在的节点重写目录模块:

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Catalog>
            <version>0.1.0</version>
        </Namespace_Catalog>
    </modules>
    <global>
        <models>
            <catalog>
                <rewrite>
                    <brand>Namespace_Brand_Model_Brand</brand>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>

接下来是一个额外的模块:

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Brand>
            <version>0.1.0</version>
        </Namespace_Brand>
    </modules>
    <global>
        <models>
            <brand>
                <class>Namespace_Brand_Model</class>
            </brand>
        </models>
    </global>
  </config>

这将允许您调用Mage :: getModel('catalog / brand')

echo get_class(Mage::getModel('catalog/brand'); // Namespace_Brand_Model_Brand