0

さて、モジュールで登録にフィールドを追加しようとしています。明らかに、属性を追加する必要があります。したがって、私の「インストール スクリプト」は実際には顧客エンティティへのアップグレードにすぎません。ただし、モジュールは有効になっていますが、フロント エンドを更新すると、インストール スクリプトが実行されません。私はサイコロを前に置いて、それが当たっているかどうかを確認しました。

他に約 7 つのスタック オーバーフローの質問を確認しましたが、それぞれのエラーはかなり明白でした。構成が含まれていたフォルダーと一致しないなどのこと。名前としてcustomer_setupを使用します。セットアップ ファイルのエラー。何度も何度も自分のコードを見てきましたが、何か小さなものが欠けていることを知っています。どこかでタイプミスがありました...しかし、私は今あまりにも多くの時間を無駄にしたので、素晴らしい人たちにそれを渡します.

構成.xml

<config>
    <modules>
        <BlizzardLabs_Customer>
            <version>0.1.0</version>
        </BlizzardLabs_Customer>
    </modules>
    <global>
        <fieldsets>
            <customer_account>
                <flavour>
                  <create>1</create>
                  <update>1</update>
                </flavour>
            </customer_account>
        </fieldsets>
        <resources>
            <blizzardlabs_customer_setup>
                <setup>
                    <module>BlizzardLabs_Customer</module>
                    <class>BlizzardLabs_Customer_Model_Entity_Setup</class>
                </setup>
            </blizzardlabs_customer_setup>
        </resources>
    </global>
</config>

BlizzardLabs/顧客/モデル/エンティティ/Setup.php

class BlizzardLabs_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup {

  public function getDefaultEntities() {
    $entities = parent::getDefaultEntities();

    // Add flavour to customer attributes
    $entities['customer']['attributes']['flavour'] = array(
        'label' => 'Ice Cream Flavour',
        'visible' => true,
        'required' => true,
    );

    return $entities;
  }

}

BlizzardLabs/顧客/sql/blizzardlabs_customer_setup/mysql4-install-0.1.0.php

Mage::log('Installing BlizzardLabs_Customer');

$installer = $this;
$installer->startSetup();
$installer->addAttribute('customer', 'flavour', array(
    'label' => 'Ice Cream Flavour',
    'type' => 'varchar',
    'input' => 'text',
    'visible' => true,
    'required' => true,
    'position' => 1,
));

$attrs = array('flavour');

foreach ($attrs as $item) {
  $attr = Mage::getSingleton('eav/config')->getAttribute('customer', $item);
  $attr->setData('used_in_forms', array('adminhtml_customer','customer_account_edit','customer_account_create'))->save();
}

$installer->endSetup();

echo "information added to database";
4

2 に答える 2

1

だから私はそれを理解しました。これがバージョンの問題かどうかはわかりませんが、完全を期すために、magento 1.13 を使用しています。

これが私の問題です:

<blizzardlabs_customer_setup>
</blizzardlabs_customer_setup>

する必要があります:

  <blizzardlabscustomer_setup>  
  </blizzardlabscustomer_setup>

もちろん、これに合わせてフォルダーを編集する必要がありました。したがって、新しいパスは/BlizzardLabs/Customer/sql/blizzardlabscustomer_setup/<file_name>.

また、後世のために、「customer_setup」の使用は機能しません。これは、Magento 基本クラスと衝突し、インストール スクリプトを実行しないためです。

これが magento のバージョンの問題なのか古いものなのかはわかりませんが、_setup の前にアンダースコアを付けることはできません。ありがとう!

于 2013-04-23T14:43:00.867 に答える