0

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

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

品牌当前不是目录模块中包含的模型。我不想修改核心文件,也不想通过将 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>

但它似乎不起作用。有谁知道如何做到这一点?

4

2 回答 2

1

可能有一些诡计,但没有官方支持,通常是一个坏主意。before=您使用的语法仅适用于routers节点。没有框架代码可以让你做你想做的事。此外,Magento 框架代码对“拥有”它们的命名空间/包名称的单个模块有很大的偏见。在现有命名空间 ( catalog) 中定义新模型引入了您的代码可能与未来版本的 Magento 代码发生冲突的理论可能性。

于 2013-10-12T01:54:30.703 回答
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
于 2013-10-12T01:52:17.597 回答