在Magento中创建自定义模块时,有时需要在系统中创建自定义属性。通常,我会使用我的设置模型扩展相关模块,或者只是扩展Mage_Core_Model_Resource_Setup。
如果我的模块需要向特定模型添加属性并需要特定的设置模型,例如eav或sales - 那么这里的最佳做法是什么。我想定义我自己的设置模型:MyCompany_MyModuel_Reseource_Setup(适用于1.6 +),然后在我的sql安装文件中创建所需的安装模型。这是最好的方法吗?
答案 0 :(得分:3)
在模块的文件中使用其他模块设置文件是完全可以接受的(也是适当的):
$otherSetup = Mage::getResourceModel('catalog/setup','default_setup');
$otherSetup->addAttribute(...);
特别是在安装新属性的情况下,每个模块都会为您处理特定于实体的属性默认值(请参阅_prepareValues()
方法)。
这当然会在你的模块的安装程序类实例中执行,但那是一个好的。
答案 1 :(得分:2)
Mage_Eav_Model_Entity_Setup::addAttribute()
之类的函数,或使用Mage_Core_Model_Resource_Setup::run()
根据需要使用SQL查询修改表。
原始答案:
可以在同一模块中使用多个资源,因此这应该足以满足您的要求。
事实上,它非常简单,只需定义两个设置资源,Magento就可以运行它们。
在config.xml中:
<config>
...
<global>
...
<resources>
<!-- Resource 1 -->
<mymodule_setup>
<setup>
<module>MyCompany_MyModule</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule_setup>
<mymodule_write>
<connection>
<use>core_write</use>
</connection>
</mymodule_write>
<mymodule_read>
<connection>
<use>core_read</use>
</connection>
</mymodule_read>
<!-- Resource 2 -->
<mymodule2_setup>
<setup>
<module>MyCompany_MyModule</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</mymodule2_setup>
<mymodule2_write>
<connection>
<use>core_write</use>
</connection>
</mymodule2_write>
<mymodule2_read>
<connection>
<use>core_read</use>
</connection>
</mymodule2_read>
</resources>
...
</global>
...
</config>
然后在app/code/local/MyCompany/MyModule/sql/mymodule_setup
和app/code/local/MyCompany/MyModule/sql/mymodule2_setup
您甚至可以通过扩展设置模型将自己的功能添加到安装程序。您可以通过添加类标记来执行此操作:
<resources>
<mymodule2_setup>
<setup>
像这样:
<class>MyCompany_MyModule_Entity_Setup</class>
并在app/code/local/MyCompany/MyModule/Entity/Setup.php
看起来像这样:
<?php
class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup
{
}
因此,如您所知,您将需要扩展Mage_Core_Model_Resource_Setup或Mage_Eav_Model_Entity_Setup(eav)。