magento(1.9)の顧客登録に新しいフィールドを追加


28

私は、顧客登録と管理者顧客作成フォームに新しいフィールドを追加するのが好きです。

フィールド名はライセンス番号です。要件に関連するリンクを検索しましたが、Magento(1.9)では機能しません。私もこれに関連する拡張機能を見つけました:

http://www.magentocommerce.com/magento-connect/custome-account-profile-13594.html

キーを使用して上記の拡張機能をインストールすると、エラーが表示されます。私の要件に関連するアイデアを教えてください。


また..あなたはできる限り多くの詳細として送ってください...あなたは上記の拡張になっているか、エラー提供
シッダールタVaghasia

これは、以前ここで回答されていますmagento.stackexchange.com/questions/14163/...
tecjam

回答:


55

新しい拡張機能を作成して、きれいにする必要があります。
拡張機能を呼び出しましょうStackExchange_Customer
次のファイルが必要です。

app/etc/modules/StackExchange_Customer.xml -宣言ファイル

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <active>true</active>
            <codePool>local</codePool>
            <depends><Mage_Customer/></depends>
        </StackExchange_Customer>
    </modules>
</config> 

app/code/local/StackExchange/Customer/etc/config.xml -構成ファイル

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <version>1.0.0</version>
        </StackExchange_Customer>
    </modules>
    <global>
        <helpers>
            <stackexchange_customer>
                <class>StackExchange_Customer_Helper</class>
            </stackexchange_customer>
        </helpers>
        <resources>
            <stackexchange_customer_setup>
                <setup>
                    <module>StackExchange_Customer</module>
                    <class>Mage_Customer_Model_Resource_Setup</class>
                </setup>
            </stackexchange_customer_setup>
        </resources>
    </global>
    <frontend>
        <layout>
            <updates>
                <stackexchange_customer>
                    <file>stackexchange_customer.xml</file>
                </stackexchange_customer>
            </updates>
        </layout>
        <translate>
            <modules>
                <StackExchange_Customer>
                    <files>
                        <default>StackExchange_Customer.csv</default>
                    </files>
                </StackExchange_Customer>
            </modules>
        </translate>
    </frontend>
</config>

app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php-インストールファイル。新しい属性を追加します。

<?php
$this->addAttribute('customer', 'license_number', array(
    'type'      => 'varchar',
    'label'     => 'License Number',
    'input'     => 'text',
    'position'  => 120,
    'required'  => false,//or true
    'is_system' => 0,
));
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'license_number');
$attribute->setData('used_in_forms', array(
    'adminhtml_customer',
    'checkout_register',
    'customer_account_create',
    'customer_account_edit',
));
$attribute->setData('is_user_defined', 0);
$attribute->save();

app/code/local/StackExchange/Customer/Helper/Data.php -モジュールのメインヘルパー

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

これにより、顧客の属性が追加されます。
バックエンドでうまく動作するはずです。
残念ながら、Magentoにはフィールドを配置できるイベントや空のブロックがないため、フロントエンドテンプレートを手動で編集する必要があります。
これには、次のものが必要です。

app/design/frontend/base/default/layout/stackexchange_customer.xml

<?xml version="1.0"?>
<layout>
    <customer_account_edit>
        <reference name="customer_edit">
            <action method="setTemplate">
                <template>stackexchange_customer/form/edit.phtml</template>
            </action>
        </reference>
    </customer_account_edit>
    <customer_account_create>
        <reference name="customer_form_register">
            <action method="setTemplate">
                <template>stackexchange_customer/register.phtml</template>
            </action>
        </reference>
    </customer_account_create>
</layout>

そして今、テンプレート。

app/design/frontend/base/default/template/stackexchange_customer/register.phtml-登録テンプレート。
このために、クローンを作成し/app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtml、フォーム内のどこかに挿入します。ここに完全なファイルを投稿する必要はありません。好きなように配置してください

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->escapeHtml($this->getFormData()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

/app/design/frontend/base/default/template/stackexchange_customer/form/edit.phtmlこの1つのクローンを作成/app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmlし、フォーム内のどこかに挿入します。

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->htmlEscape($this->getCustomer()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

翻訳ファイルを作成することもできます。必須ではありませんが、持っていると便利です

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

キャッシュをクリアすると、設定されるはずです。


私はあなたのやり方に従っていますが、フィールドは管理箱のユーザーページに表示されません。
センチル

@senthil。あなたが正しいです。ごめんなさい 間違ったインストールスクリプトを貼り付けました。答えを正しいapp/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phpファイルで更新しました。モジュールはすでにインストールされているため、新しいインストールスクリプトは再度実行されません。再度実行するにeav_attributeは、コードlicense_numberから属性をテーブルから削除し、コードからcore_resourceレコードをテーブルから削除する必要がありますStackExchange_Customer。キャッシュをクリアし、ページを更新します。インストールスクリプトが再度実行されます。
マリウス

2
@senthil他のフィールドを追加する予定がある場合は、クローンファイルにクローンinstall-1.0.0を作成upgrade-1.0.0-1.0.1し、変更を行う必要があります。次に、versionタグをに変更config.xml1.0.1ます。アップグレードスクリプトの仕組みについては、magento.stackexchange.com
Marius

1
こんにちは、複数の属性を設定する方法は教えてくれませんか?コードを変更して、複数の属性を試しました。まだ動かない 。説明してください
-Pratik

1
@Haris、アップロードのために、あなたはおそらく余分なことをする必要がありますが、私は何を知りません。
マリウス

0

おかげでマリウス、唯一のもの、登録のためのチェックアウト請求情報にフィールドが表示されません。

チェックアウト登録でフィールドを表示する方法は?

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.