quarta-feira, 10 de outubro de 2012

Tutorial: Adicionando um campo personalizado no formulário da newsletter


Olá pessoal!
No Magento apenas o campo e-mail é apresentado no formulário para que o visitante assine o boletim informativo da loja e as demais informações, como nome,  só são exibidas se o assinante é um cliente. Isso dificulta a vida dos lojistas que querem um contato mais pessoal com seus visitantes, afinal, estes podem se tornar futuros clientes. No tutorial de hoje irei explicar como acrescentar o campo nome no formulário da newsletter, salvá-lo no banco e visualizá-lo no painel administrativo. À partir dele, você poderá inserir quais campos quiser! Agora chega de enrolação e vamos ao passo-a-passo:


1º Passo - Adicionar a coluna subscriber_name na tabela newsletter_subscriber:
Acesse o banco de dados via phpMyAdmin;
Procure a tabela newsletter_subscriber;
Adicione a coluna subscriber_name (tipo: varchar, tamanho:50).

2º Passo - Adicionar a caixa de texto no frontend para o preenchimento do nome e inserir as legendas necessárias:
Abra o arquivo subscribe.phtml (app->design->frontend->default->SeuTema->template->newsletter) que é responsável pelo template da newsletter;
Procure a seguinte linha:

        <input type="text" name="email" id="newsletter" title="<?php echo $this->__('Sign up for our newsletter') ?>" class="input-text required-entry validate-email" />

E substitua pelo seguinte código:

            <?php echo 'Nome:' ?><input type="text" name="subscriber_name" id="newsletter" title="Nome" class="input-text required-entry"/>
        <?php echo 'E-mail:' ?> <input type="text" name="email" id="newsletter" title="E-mail" class="input-text required-entry validate-email" />


O resultado será o seguinte:



Mas ainda não acabou. Agora nós temos que salvar o nome digitado no banco e exibi-lo no admin. Para isso vamos criar um observer!

3º Passo -  Adicionar o Observer antes do cadastro da newsletter ser salvo:
-Abra o arquivo config.xml (app->code->core->Mage->Newsletter->etc) e procure a abertura da tag <global>;
Logo abaixo dela, insira o seguinte código:

    <events>
            <newsletter_subscriber_save_before>
                <observers>
                    <newsletter_subscribe_observer>
                        <class>newsletter/observer</class>
                        <method>newsletterSubscriberSave</method>
                    </newsletter_subscribe_observer>
                </observers>
            </newsletter_subscriber_save_before>
    </events>


-Abra o arquivo Observer.php (app->code->core->Mage->Newsletter->Model) e insira o seguinte código antes da chave (}) de fechamento da classe Mage_Newsletter_Model_Observer (no final do arquivo)

    public function newsletterSubscriberSave(Varien_Event_Observer $observer)
    {
        $subscriber = $observer->getEvent()->getSubscriber();
        $name = Mage::app()->getRequest()->getParam('subscriber_name');

        $subscriber->setSubscriberName($name);

        return $this;
    }


4º Passo e último - Exibir o nome cadastrado no painel administrativo (Newsletter->Assinaturas de Newsletter):
Abra o arquivo Grid.php (app->code->core->Mage->Adminhtml->Block->Newsletter->Subscriber) e procure o seguinte trecho:

        $this->addColumn('type', array(
            'header'    => Mage::helper('newsletter')->__('Type'),
            'index'     => 'type',
            'type'      => 'options',
            'options'   => array(
                1  => Mage::helper('newsletter')->__('Guest'),
                2  => Mage::helper('newsletter')->__('Customer')
            )
        ));


Logo abaixo dele, coloque o seguinte código:

        $this->addColumn('subscriber_name', array(
            'header'    => Mage::helper('newsletter')->__('Nome Visitante'),
            'index'     => 'subscriber_name',
            'default'   =>    '----'
        ));


Feito isso, o nome do visitante cadastrado na newsletter será exibido na coluna Nome Visitante, que ficará logo após o tipo:



Então é isso! Qualquer dúvida, deixe um comentário!
=)
Fonte: Adding a custom field to Magento's subscribtion module

14 comentários:

  1. Segui todos os passos porem o nome não eh salvo no banco, fiz o teste de colocar o nome pelo phpmyadmim e apareceu no painel administrativo.

    ResponderExcluir
    Respostas
    1. Olá Tiago Gomes!
      Desculpa a demora para responder!
      Quanto ao seu problema, na caixa de texto inserida no arquivo subscriber.phtml para que o usuário digitasse o nome, você inseriu na propriedade name o mesmo nome dado a coluna criada na sua tabela?

      Excluir
    2. também estou com esse problema, é como se o método observe não estivesse sendo chamado

      Excluir
    3. Boa Tarde!
      O código funciona, tanto que um usuário do fórum da Comunidade Magento conseguiu fazer. Vocês realmente seguiram à risca todos os passos? Com certeza o erro está no 3º passo, verifiquem se todos os códigos foram inseridos nos locais corretos. Caso queiram entrar em contato pelo e-mail fiquem à vontade: referencia.magento@gmail.com

      Excluir
    4. achei o problema para o meu caso.

      Todos os módulos que estou modificando coloco dentro da pasta "app/code/local/Mage" que é onde se encontra a pasta "Newsletter". até ai tudo bem pois é padrão do megendo. O estranho é que o magento esta usando o Observer.php da pasta "app/code/local/Mage/Newsletter/Model" e o config.xml da pasta "app/code/core/Mage/Newsletter/etc"


      ou seja ele usa o config.xml do core, o o observer.php dos meus módulos sobrescritos em local/mage mesmo minha pasta local contendo o etc/config.xml não entendi isso, era pra ta usando tudo da pasta loca/


      sim,PARABÉNS PELO POST ELE É ÚNICO, FAZ UM TEMPO QUE PROCURAVA ISSO. MUITO OBRIGADO

      Excluir
    5. Fico feliz que você tenha encontrado uma solução para o seu problema e também pelo tutorial ter te ajudado de alguma forma!
      =)

      Excluir
  2. Olá,

    Fiz o procedimento exatamente como informado mas o nome do visitante não está sendo salvo.

    Por favor tem alguma dica.

    Estou usando Magento versão. 1.7.0.2

    ResponderExcluir
    Respostas
    1. Olá Edson!
      O nome da coluna criada no banco de dados é o mesmo do campo adicionado no subscribe.phtml? Já tentou inserir o nome direto no bd? Se sim, ele aparece no painel do magento?

      Excluir
  3. Obrigado pela dica.
    Parabéns,
    Exelente tutorial.
    Tudo certo agora.

    Valeu!

    ResponderExcluir
  4. Olá!
    Fiz todo o procedimento, mas o nome não está salvando no painel.

    ResponderExcluir
    Respostas
    1. Olá Agnes!
      O nome da coluna criada no banco de dados é o mesmo do campo adicionado no subscribe.phtml? Já tentou inserir o nome direto no bd? Se sim, ele aparece no painel do magento?

      Excluir
  5. Direto no bd, aparece, mas se preencho normal no site não aparece. =S

    ResponderExcluir
    Respostas
    1. Agnes, verifique se no seu Magento existem os arquivos citados no 3º passo, só que no diretório local:

      app->code->local->Mage->Newsletter

      Se houver, você deverá alterar os que estão lá e não os do core.

      Compare os códigos com o do tutorial e verifique se todos estão corretos (principalmente no passo 3). Caso queira entrar em contato pelo e-mail, fique à vontade:
      ale.srodrigues@live.com




      Excluir