Adicionar novo campo no registro de cliente magento (1.9)

28

Eu gosto de adicionar um novo campo no registro de clientes e no formulário de criação de clientes administrativos.

O nome do campo é o número da licença . Eu procurei tantos links relacionados aos meus requisitos, mas esses não funcionam no Magento (1.9). Até eu encontrei a extensão relacionada a isso:

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

Quando instalei a extensão acima usando a tecla, ela mostra um erro. Você pode dar alguma idéia relacionada à minha exigência?

senthil
fonte
Também fornecer o erro que você está recebendo em extensão acima ... por favor enviar o máximo de detalhes como você pode ..
Siddharth Vaghasia
Isso já foi respondido aqui: magento.stackexchange.com/questions/14163/…
tecjam

Respostas:

55

Você precisa criar uma nova extensão para torná-la limpa.
Vamos ligar para o ramal StackExchange_Customer.
Você precisará dos seguintes arquivos:

app/etc/modules/StackExchange_Customer.xml - o arquivo de declaração

<?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 - o arquivo de configuração

<?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- o arquivo de instalação. Irá adicionar o novo atributo.

<?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 - o auxiliar principal do módulo

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Isso adicionará seu atributo ao cliente.
Deve funcionar bem no back-end.
Infelizmente você precisa editar os modelos de front-end manualmente agora, porque o Magento não possui nenhum evento ou bloco vazio onde você pode colocar seus campos.
Para isso, você precisa do seguinte.

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>

E agora os modelos.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- o modelo de registro.
Para isso, faça um clone do /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmle insira-o em algum lugar do formulário. Não preciso postar o arquivo completo aqui. Organize como quiser

<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.phtmlPara este clone /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmle insira em algum lugar dentro do formulário this:

<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>

Você também pode criar o arquivo de tradução. Não é obrigatório, mas é bom ter

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Limpe o cache e você deve estar definido.

Marius
fonte
sigo como você, mas o campo não é exibido na página de usuário da caixa de administração.
Senthil
@senthil. Você está certo. Me desculpe por isso. Eu colei o script de instalação errado. Atualizei a resposta com o app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phparquivo correto . Como você já instalou o módulo, o novo script de instalação não será executado novamente. Para executá-lo novamente, é necessário excluir da tabela eav_attributeo atributo com o código license_numbere da tabela core_resourceo registro com o código StackExchange_Customer. Limpe o cache e atualize a página. O script de instalação deve ser executado novamente.
Marius
2
@senthil If you plan to add other fields you should clone install-1.0.0 to upgrade-1.0.0-1.0.1 and do your modifications in the cloned file. Then change the version tag in config.xml to 1.0.1. See how upgrade scripts work here: magento.stackexchange.com/q/26313/146
Marius
1
Oi senhor, você não nos disse Como definir vários atributos? Eu tentei vários atrs modificando seu código. Ainda não funciona . Por favor, explique
Pratik
1
@ Haris, para uploads, você provavelmente precisa fazer algo extra, mas não sei o quê.
Marius
0

Obrigado Marius, só uma coisa, o campo não aparece nas informações de cobrança do checkout para registro.

Como posso fazer o campo aparecer no registro de checkout?

obrigado

DanMar
fonte