magento (1.9) 고객 등록에 새 필드 추가


28

고객 등록 및 관리자 고객 생성 양식에 새 필드를 추가하고 싶습니다.

필드 이름은 라이센스 번호 입니다. 내 요구 사항과 관련된 많은 링크를 검색했지만 Magento (1.9)에서는 작동하지 않습니다. 심지어 이것과 관련된 확장을 찾았습니다.

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

키를 사용하여 위의 확장을 설치하면 오류가 표시됩니다. 내 요구 사항과 관련된 아이디어를 줄 수 있습니까?


또한 확장명 이상으로 어떤 오류가 발생했는지 알려주십시오. 최대한 많은 정보를 보내주십시오 ..
— Siddharth 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이 복제본의 경우 다음 /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

@senthil. 네 말이 맞아 미안합니다. 잘못된 설치 스크립트를 붙여 넣었습니다. 올바른 app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php파일로 답변을 업데이트했습니다 . 모듈을 이미 설치 했으므로 새 설치 스크립트가 다시 실행되지 않습니다. 다시 실행하면 테이블에서 삭제해야 만들려면 eav_attribute코드와 속성을 license_number테이블에서 core_resource코드로 기록 StackExchange_Customer. 캐시를 지우고 페이지를 새로 고치십시오. 설치 스크립트가 다시 실행되어야합니다.
— Marius

2
다른 필드를 추가하려는 경우 @senthil 당신은 복제해야 install-1.0.0에 upgrade-1.0.0-1.0.1복제 된 파일에 수정을한다. 그런 다음 version태그를 config.xml로 변경하십시오 1.0.1. 업그레이드 스크립트가 어떻게 작동하는지 확인하십시오 : magento.stackexchange.com/q/26313/146
— Marius

1
안녕하세요 선생님, 여러 속성을 설정하는 방법을 알려주지 않았습니까? 코드를 수정하여 여러 attr을 시도했습니다. 그래도 작동이 안되는 . 설명하십시오
— Pratik

1
@Haris, 업로드의 경우 추가 작업을 수행해야 할 수도 있지만 무엇을 모르겠습니다.
— Marius

0

감사합니다 Marius, 단 하나의 필드는 등록 청구 정보에 표시되지 않습니다.

결제 등록시 필드를 어떻게 표시합니까?

감사

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.