我想将自己的实体引入特定的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>
但它似乎不起作用。 有谁知道如何实现这一目标?
答案 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