Adicionando campos customizados ao Customer no Magento

Adicionar um novo atributo(attribute) customizado(custom) para o cliente(custormer) no Magento nunca foi tão fácil, mas tenho que admitir que apanhei um pouco pra chegar nesse resultado final.

Basicamente o gostaria de fazer era adicionar um campo customizado ao customer do Magento e exibi-lo tanto no admin, quanto na página de registro e na página de informações do usuário o “Minha conta” (my account).

No exemplo que fiz aqui adicionei um campo customizado chamado CPF e o defini como obrigatório. A primeira parte desse código adiciona o atributo “cpf” ao cliente, ou seja cliente vai ter um atributo a mais. Além de nome, sobrenome … e outras diversas informações, vai ter também o CPF.

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->removeAttribute('customer', "cpf" );

$setup->addAttribute('customer', 'cpf', array(
            'label'           => 'CPF',
            'type'            => 'varchar',
            'input'           => 'text',
            'visible'   => true,
            'required'  => true,
            'position'  => 69,
            )
      );

A segunda parte define em quais formulários o atributo CPF deve aparecer. No meu caso é um campo importante por tanto coloquei-o disponível nos campos em “editar conta” ( em minha conta), criar conta (criar conta básico), informações da conta em cliente e na página de criar conta na página de checkout.

$customerattribute = Mage::getModel('customer/attribute')->loadByCode('customer','cpf');
$forms             = array(
                           'customer_account_edit',
                           'customer_account_create',
                           'adminhtml_customer',
                           'checkout_register'
                          );
$customerattribute->setData('used_in_forms',$forms);
$customerattribute->save();

O código acima adiciona automaticamente o campo CPF no formulário da informações da conta para o cliente(customer) no admin do Magento, já nos outros formulários os campos devem ser definidos manualmente lá nos .phtml que lhes cabe.

Vou começar colocando o campo CPF na página de registro, aquela básica que normalmente pede nome, sobrenome, email e senha. Nessa página vou adicionar esse novo campo. Trabalhando com o customer é de se esperar que encontraremos os arquivos que queremos editar dentro da pasta “../template/customer/” dentro do seu tema, se por acaso o seu tema não tiver essa pasta copia a do “./frontend/base/default/template/customer/” para a pasta template do seu do seu tema.

O primeiro arquivo que vou editar é o register.phtml que você encontra em,./app/design/frontend/default/<seu_tema>/template/customer/form/register.phtml, ou em ./app/design/frontend/default/<seu_tema>/template/persistent/customer/form/register.phtml, logo abaixo do <li> que define o espaço do do email coloque

<li>
<label class="required" for="cpf"><em>*</em>
<?php echo $this->__('CPF') ?>
</label>
<div class="input-box">
<input id="cpf" class="input-text required-entry"
title="<?php echo $this->__('CPF') ?>" type="text" name="cpf"
value="<?php echo $this->htmlEscape($this->getFormData()->getCpf()) ?>" />
</div>
</li>

Pra ver esse novo campo, atualize o cache do seu Magento e entre no URL referente a sua instalação, como segue o exemplo: http://exemplo.org.br/customer/account/create/, e veja o seu novo campo lá.

 

 

Campo CPF no Magento na página criar conta/account create, Custom Attribute
Campo CPF no Magento na página criar conta/account create, atributo customizado.

 

Para disponibilizar esse campo para o seu cliente de forma que ele possa editar o passo a passo é semelhante, mas o arquivo é o edit.phtml. Encontrado em ./app/design/frontend/default/<seu_tema>/template/customer/form/edit.phtml. Novamente logo abaixo o <li> do email coloque o código abaixo

<li>
<label for="cpf" class="required"><em>*</em>
<?php echo $this->__('CPF') ?>
</label>
<div class="input-box">
<input type="text" name="cpf" id="cpf"
value="<?php echo $this->htmlEscape($this->getCustomer()->getCpf()) ?>"
 title="<?php echo $this->__('CPF') ?>" class="input-text required-entry" />
</div>
</li>

Deve ficar mais ou menos assim

Novo campo de CPF Magento
Campo de CPF Magento, usando o passo a passo a cima.

Nesse ponto já disponibilizei o campo obrigatório no registro e para editar em informações da conta na sessão minha conta do cliente.

Até o próximo post, e que leve menos tempo do que esse!
:)

Referencia:

http://www.blog.jpk.in/2011/08/05/magento-add-custom-field-to-customer-account-form-in-admin-from-version-1-5/

 

 


Comentários

27 respostas para “Adicionando campos customizados ao Customer no Magento”

  1. Avatar de Tiago

    Olá, parabéns pela solução, mas tenho uma dúvida, em qual(is) arquivo(s) você insere os 2 primeiros códigos citado no post? Para criar o novo campo.

    Abrigado e parabéns pela iniciativa!

    1. Fala Tiago,
      Você pode criar um modulo pra adicionar esses campos usando o setup do modulo utilizando o mysql-install-x.x.x.php ou mysql-upgrade-x.x.x.php.
      Há também a possibilidade de você criar um arquivo php na raiz do Magento, cola o conteúdo do index.php e no final do arquivo você adiciona os códigos do meu blog e execute somente uma vez o arquivo.

      Recomendo que você faça os testes usando uma instalação de teste do Magento, e que tenha backup do banco.

      Abraço,

  2. Cara, seria muito pedir que você colocasse o que você alterou no billing.phtml para poder receber o CPF quando o usuário estiver no checkout? Eu fiz por aqui, o campo aparece no form mas não fica no banco. No cadastramento avulso funciona, mas no cadastramento direto no checkout não.

    1. Fala ai Leronardo,

      Eu vou criar um post só para essa parte do checkout, que é um pouco mais complicada por que tem que sobrescrevermos algumas classes. Vo tentar colocar ela e te aviso por email.

      Abraço,

      1. Show. Eu estou fazendo de tudo aqui, mas não consigo fazer ele gravar os valores pelo checkout. Impressionante…

        1. Avatar de Fabricio
          Fabricio

          Também estou com o mesmo problema…

          como sou iniciante na questão do Magento, gostaria de uma ajuda..
          Consegui incluir 3 campos, após o endereço.
          Bairro,
          Numero,
          Complemento.

          Gostaria de colocar mais um campo que seria o Ponto de Referencia.
          se alguém souber.. por favor me mandar no e-mail

      2. Avatar de Bruno

        Bom dia Thiago,

        Incrível o seu post. Estava querendo fazer isso faz tempo, porém sem sucesso.

        Queria saber se você vai postar a segunda parte dele, com relação a gravação no banco de dados, pois estou tendo o mesmo problema que o Leonardo, não salva pelo checkout.

        Alguma novidade?

        Mais uma vez, parabéns pelo trabalho.

      3. Avatar de Alex

        Thiago,

        Também fico no aguardo da segunda postagem sobre o processo de checkout.

        Abraço,

        1. Avatar de Bruno

          alguém conseguiu salvar o valor do atributo pela tela de checkout?

  3. Avatar de Israel Costa
    Israel Costa

    Ótimas informações Thiago, funcionou perfeitamente. Estou tentando agora fazer com que o visitante use o CPF e senha para fazer login no site, mas to apanhando feio. Tem alguma dica?

    Abraço.

    1. Que bom que foi útil!

      Nunca tinha feito isso, por tando fui fazendo “engenharia reversa” e cheguei ao seguinte flow. Espero que seja os pontos certos.
      Sugiro fortemente que você crie um modulo e sobrescreva as classes dos meus passos 3 e 4 antes de fazer a mudança.

      1 – Customer/controllers/AccountController.php
      2 – Customer/Model/Session.php

      3 – Customer/Model/Customer.php
      #Authenticate
      linha: 157 – loadByEmail mudar para loadByCPF

      4 – Customer/Model/Resource/Customer.php
      #loadByEmail
      linha: 201 – clonar o metodo loadByEmail alterando o nome para loadByCPF, fazendo as mudanças necessárias no select para encontrar o CPF

      Abraço,

  4. Avatar de Leo Souza
    Leo Souza

    Parabéns pela iniciativa é muito complicado para iniciantes colocar novos campos.
    Consegui fazer com que os campos que eu quero apareça no customer mais não consigo de jeito nenhum fazer o campo no banco de dados fiz como você explicou. copiei o conteúdo do index.php e coloquei o seu codigo no final e executei mais nada acontece no banco ele não cria o campo na tabela eav_atribute é nessa tabela mesmo ou ele cria em outro lugar?
    Desculpe pela duvida mais sou novo no magento e to apanhando bastante.

  5. Avatar de Felipe Souto
    Felipe Souto

    “Trabalhando com o customer é de se esperar que encontraremos os arquivos que queremos editar dentro da pasta “../template/customer/” dentro do seu tema, se por acaso o seu tema não tiver essa pasta copia a do “./frontend/base/default/template/customer/” para a pasta template do seu do seu tema.”

    Se você seguir o descrito acima e não aparecer o campo “CPF” na página de cadastro (o que aconteceu comigo), crie na pasta template do seu tema uma pasta “persistent” e daí sim copie a pasta “customer” do tema padrão para dentro desta pasta. Ficaria assim:

    /app/design/frontend/default//template/persistent/customer/

    Estou seguindo este tutorial e usando Magento 1.7.0.

  6. Avatar de thiago
    thiago

    Boa tarde, estou tentando criar um campo custom chamado username, porem eu gostaria que esse campo fosse único exatamente como é o campo de email. É possivel?

  7. Avatar de Felipe Gama Gonzalez
    Felipe Gama Gonzalez

    boa tarde, muito bom o post, bem explicado!

    só fiquei com uma dúvida, onde (arquivo) que eu coloco o 2 primeiros trechos do código??

    desde já agradeço

  8. Avatar de Rafael
    Rafael

    Sem palavras para descrever o quanto estou feliz por ter encontrado esta solução! Muito obrigado cara, salvou meu dia!!!!

  9. Avatar de Arquimedes
    Arquimedes

    Cara, segui muitos tutoriais pra fazer isso e todos deram pau, o unico que funcionou foi o seu.. Brigadao.. salvou uns 3 dias de trabalho..

  10. Parabéns pelo post. Muito bem explicado e detalhado.

  11. Olá eu uso a versão 1.7.0.2 do magento e não consigo fazer aparecer de jeito nenhum o campo CPF vc poderia me dar mais algumas dicas.

    Grata!

  12. Muito Obrigado! Funcionou.

    Mas está complicado de utilizar, porque preciso que esses dados também sejam recuperados no checkout, assim como são recuperados os outros campos e também que esses sejam gravados por lá.

    Vi que você iria fazer essa segunda parte, já tem mais de um ano, então acredito que tenha feito, mas não estou conseguindo encontrar.

    Poderia ajudar?
    Obrigado!

  13. Avatar de Tiago Farias
    Tiago Farias

    Olá Thiago, não sei se as perguntas devem ser aceitas, porém, eu perguntei em uma outra oportunidade e não estou encontrando aqui.

    Poderia por gentileza disponibilizar um conteúdo de criação de módulo, principalmente abordando o assunto de frontend.

    Obrigado e parabéns pelo seu trabalho, sucesso!

  14. Beleza o campo funcionou perfeitamente, agora necessito utilizar este campo em uma API de integração do Magento, com SOAP como consigo fazer isso?? Tem alguma idéia?? Obrigado

    1. Avatar de Fabiana Catto
      Fabiana Catto

      Olá Celso!

      Conseguiu aplicar este campo na API de integração do Magento?

  15. Avatar de Sebastião
    Sebastião

    Entendi nada. No começo do post aparece uns códigos onde vc não explica onde estão. Tb não explica como colocar o campo na tela do admin do magento. Tb não explicou como o atributo foi parar no banco de dados.

    1. Essa configuração é para o Magento 1 e para quem já conhece a plataforma.
      Aqui não é o Stackoverflow.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.