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.0upgrade-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.