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:

1. <?php $this->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 é:

1. <?php echo $this->getChildHtml(‘newsletter.additional’) ?>

O arquivo deve ficar assim:

<div class="block block-subscribe">
 <div class="block-title">
 <strong><span><?php echo $this->__('Newsletter') ?></span></strong>
 </div>
 <form action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
 <div class="block-content">
 <div class="form-subscribe-header">
 <label for="newsletter"><?php echo $this->__('Sign Up for Our Newsletter:') ?></label>
 </div>
 
 <?php echo $this->getChildHtml('newsletter.additional') ?>
 
 <div class="input-box">
 <input type="email" autocapitalize="off" autocorrect="off" spellcheck="false" name="email" id="newsletter" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Sign up for our newsletter')) ?>" class="input-text required-entry validate-email" />
 </div>
 <div class="actions">
 <button type="submit" title="<?php echo Mage::helper('core')->quoteEscape($this->__('Subscribe')) ?>" class="button"><span><span><?php echo $this->__('Subscribe') ?></span></span></button>
 </div>
 </div>
 </form>
 <script type="text/javascript">
 //<![CDATA[
 var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail');
 //]]>
 </script>
</div>

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:

<frontend>
 <events>
 <newsletter_subscriber_save_before>
 <observers>
 <snowcore_subscriber_save_additional>
 <class>snowcore_subscriber/observer</class>
 <method>saveAdditionalData</method>
 </snowcore_subscriber_save_additional>
 </observers>
 </newsletter_subscriber_save_before>
 </events>
</frontend>

E o Observer ficará assim:

/**
 * @param Varien_Event_Observer $observer
 */
public function saveAdditionalData(Varien_Event_Observer $observer)
{
    $subscriber  = $observer-&amp;gt;getSubscriber();
    $countryCode = Mage::app()-&amp;gt;getRequest()-&amp;gt;getParam('country_code');
 
    $subscriber-&amp;gt;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.

   
<adminhtml>
 <events>
 <core_block_abstract_prepare_layout_before>
 <observers>
 <snowcore_subscriber_add_column>
 <class>snowcore_subscriber/observer</class>
 <method>addGridColumn</method>
 </snowcore_subscriber_add_column>
 </observers>
 </core_block_abstract_prepare_layout_before>
 </events>
</adminhtml>

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

public function addGridColumn(Varien_Event_Observer $observer)
{
    $block = $observer-&gt;getBlock();
    if ($block &amp;&amp; $block instanceof Mage_Adminhtml_Block_Newsletter_Subscriber_Grid) {
        /** @var Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block */
        $block-&gt;addColumnAfter('country_code', array(
            'header'    =&gt; 'Country',
            'type'      =&gt; 'options',
            'index'     =&gt; 'country_code',
            'options'   =&gt; Mage::helper('snowcore_subscriber')-&gt;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/

2017-01-24T20:23:11+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x