5

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

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

4

2 回答 2

3

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

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

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

这当然会在您模块的设置类实例中执行,但没关系。

于 2012-04-12T11:51:23.820 回答
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)。

于 2012-04-11T23:53:07.830 回答