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クエリを使用してテーブルを変更するために使用できます。

元の答え:

同じモジュール内で複数のリソースを使用することが可能であるため、これはあなたが求めていることを行うのに十分なはずです。

実際、これは非常に簡単です。2つのセットアップリソースを定義するだけで、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)を拡張する必要があります。

于 2012-04-11T23:53:07.830 に答える