Magento-自定义模块需要多个设置模型

Magento-自定义模块需要多个设置模型,magento,Magento,在Magento中创建自定义模块时,有时需要在系统中创建自定义属性。通常,我会用我的设置模型扩展相关模块,或者简单地扩展Mage_Core_model_Resource_设置 如果我的模块需要向特定模型添加属性,并且需要特定的设置模型,即eav或sales,那么这里的最佳实践是什么。我正在考虑定义自己的安装模型:MyCompany\u MyModuel\u resource\u setup(适用于1.6+),然后在我的sql安装文件中创建所需的安装模型。这是最好的方法吗?编辑:我已经读了你的问题

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


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

编辑:我已经读了你的问题,我不确定我是否完全掩盖了你的问题。然而,这些信息在某种程度上是适用的,所以我将把它留在这里。然而,我认为您的问题是关于向现有实体添加属性的最佳实践。特别是在这一点上,使用设置资源向东西添加属性(EAV或其他)是完全可以接受的。为此,您可以使用诸如
Mage\u Eav\u Model\u Entity\u Setup::addAttribute()
之类的函数,或者使用
Mage\u Core\u Model\u Resource\u 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>
像这样:

<class>MyCompany_MyModule_Entity_Setup</class>
<?php
    class MyCompany_MyModule_Entity_Setup extends Mage_Eav_Model_Entity_Setup
    {
    }
因此,正如您所怀疑的,您需要扩展Mage_Core_Model_Resource_设置或Mage_Eav_Model_Entity_设置(Eav)。

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

$otherSetup = Mage::getResourceModel('catalog/setup','default_setup');
$otherSetup->addAttribute(...);
特别是在安装新属性的情况下,每个模块将为您处理特定于实体的属性默认值(请参见
\u prepareValues()
方法)


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

这让我痛苦了很多次。始终确保为要添加到的实体类型使用正确的资源模型!
$otherSetup = Mage::getResourceModel('catalog/setup','default_setup');
$otherSetup->addAttribute(...);