Magento - 自定义模块所需的多种设置模型

时间:2012-04-11 22:17:23

标签: magento

在Magento中创建自定义模块时,有时需要在系统中创建自定义属性。通常,我会使用我的设置模型扩展相关模块,或者只是扩展Mage_Core_Model_Resource_Setup。

如果我的模块需要向特定模型添加属性并需要特定的设置模型,例如eav或sales - 那么这里的最佳做法是什么。我想定义我自己的设置模型:MyCompany_MyModuel_Reseource_Setup(适用于1.6 +),然后在我的sql安装文件中创建所需的安装模型。这是最好的方法吗?

2 个答案:

答案 0 :(得分:3)

在模块的文件中使用其他模块设置文件是完全可以接受的(也是适当的):

$otherSetup = Mage::getResourceModel('catalog/setup','default_setup');
$otherSetup->addAttribute(...);

特别是在安装新属性的情况下,每个模块都会为您处理特定于实体的属性默认值(请参阅_prepareValues()方法)。

这当然会在你的模块的安装程序类实例中执行,但那是一个好的。

答案 1 :(得分:2)

编辑:我已经重新阅读了你的问题,而且我不确定我是否完全覆盖了你所要求的内容。尽管如此,这些信息仍适用,所以我会把它留在这里。但是,我认为您的问题是关于向现有实体添加属性的最佳做法。特别是在这一点上,使用设置资源向事物,EAV或其他方面添加属性是完全可以接受的。您可以为此使用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_setupapp/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)。