Como adicionar um campo personalizado para formulário de newsletter no Magento

Por padrão, o módulo de newsletter do Magento nos fornece o e-mail como o único campo. Neste artigo, vou mostrar-lhe como adicionar um campo personalizado para o formulário de newsletter. 

Os passos principais para a adição do novo campo são:

  1. Adicionar nova coluna à tabela newsletter_subscriber;
  2. Adicionar o dropdown no formulário de inscrição;
  3. Criar um método Observer para o evento newsletter_subscriber_save_before;

Neste exemplo, adicionaremos a coluna País ao formulário de newsletter.

LEMBRETE: Crie  uma extensão ou módulo isolado para este caso. Jamais altere os arquivos do core do Magento!

Adicionando nova coluna da tabela

Isso pode ser feito usando um simples script de instalação:

getConnection()->addColumn($this->getTable('newsletter/subscriber'), 'country_code', 'varchar(2) null'); ?>

Alterações no template

Este exemplo foi elaborado no Magento Community 1.9.2.2, sendo assim, o arquivo de template para o tema padrão está localizado em: app/design/frontend/rwd/default/template/newsletter/subscribe.phtml (sinta-se livre copiar este arquivo para o seu tema personalizado).

A linha que precisa ser adicionada é:

getChildHtml('newsletter.additional') ?>

O arquivo deve ficar assim:

__('Newsletter') ?>
getChildHtml('newsletter.additional') ?>

Neste exemplo, não utilizamos qualquer estilo, por isso pode parecer “feio”. Fique a vontade para adicionar algum estilo de acordo com seu gosto ou dentro do seu layout.

Gravando as informações

Nós definimos método Observer no arquivo config.xml do seu módulo:


    
        
            
                
                    snowcore_subscriber/observer
                    saveAdditionalData
                
            
        
    

E o Observer ficará assim:

/**
 * @param Varien_Event_Observer $observer
 */
public function saveAdditionalData(Varien_Event_Observer $observer)
{
    $subscriber  = $observer->getSubscriber();
    $countryCode = Mage::app()->getRequest()->getParam('country_code');

    $subscriber->setCountryCode($countryCode);
}

Isso permite salvar o valor código de país na tabela de newsletter. A partir de agora, você pode usar este campo em qualquer lugar que você precisa. Por exemplo, no modelo de boletim este valor pode ser referenciado como este:

Country: {{var subscriber.country_code}}

Etapas adicionais

A funcionalidade principal foi realizada, mas será útil para ver nossa coluna país no grid assinantes no admin. Sugiro usar outro método Observer para o evento evento core_block_abstract_prepare_layout_before.

    

    
        
            
                
                    snowcore_subscriber/observer
                    addGridColumn
                
            
        
    

E aqui o método para adicionar a coluna no grid:

public function addGridColumn(Varien_Event_Observer $observer)
{
    $block = $observer->getBlock();
    if ($block && $block instanceof Mage_Adminhtml_Block_Newsletter_Subscriber_Grid) {
        /** @var Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block */
        $block->addColumnAfter('country_code', array(
            'header'    => 'Country',
            'type'      => 'options',
            'index'     => 'country_code',
            'options'   => Mage::helper('snowcore_subscriber')->getCountriesOptionHash()
        ), 'lastname');
    }
}

Módulo de exemplo: https://github.com/snowcore/newsltetter_subscriber

Artigo original: http://snowcore.net/how-to-add-a-custom-field-to-magento-subscription-form/

Deixe um comentário

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