adicionar caixa de seleção Boletim informativo no formulário de cobrança


11

Gostaria de adicionar o boletim da caixa de seleção no formulário de cobrança quando o usuário optar por se registrar diretamente no processo de pagamento. Como posso fazer isso?


2
Você planeja utilizar o MailChimp para atender às suas necessidades de envio de boletins? A extensão MageMonkey da ezbizmarts possui uma opção de configuração para adicionar inscrição no boletim informativo ao processo de checkout.
Darren Felton

Respostas:


15

oi, você pode adicionar isso adicionando o código abaixo em billing.phtml

 <input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />

usando o evento, checkout_submit_all_afterinscreva o cliente na newsletter

  <global>
 <events>
    <checkout_submit_all_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_submit_all_after_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento52274/observer</class> <!-- observers class alias -->
            <method>AssignNewletter</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_submit_all_after_handler>
        </observers>
      </checkout_submit_all_after>
    </events>
  </global>

E o código do Observer é:

   public function AssignNewletter($observer) {
            $event = $observer->getEvent();
            $order = $event->getOrder();
        $Quote =$event->getQuote();
        if (in_array($Quote()->getCheckoutMethod(), array('register','customer'))):

        if (Mage::app()->getFrontController()->getRequest()->getParam('is_subscribed')){
        $status = Mage::getModel('newsletter/subscriber')->subscribe($Quote->getBillingAddress()->getCustomerEmail());
        }
        endif;
   }

Módulo completo:

Etapa 1: crie config.xml em app/code/local/Stackexchange/Magento52274/etc/e o código é

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento52274>
      <version>1.0.0</version>
    </Stackexchange_Magento52274>
  </modules>
  <global>
    <models>
      <magento52274>
        <class>Stackexchange_Magento52274_Model</class>
      </magento52274>
    </models>
    <events>
      <checkout_submit_all_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_submit_all_after_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento52274/observer</class> <!-- observers class alias -->
            <method>AssignNewletter</method>  <!-- observer's method to be called -->
          </checkout_submit_all_after_handler>
        </observers>
      </checkout_submit_all_after>
    </events>
  </global>
</config> 

Etapa 2: criar Observer.phpem app/code/local/Stackexchange/Magento52274/Model/e código é

<?php
class Stackexchange_Magento52274_Model_Observer
{

    public function AssignNewletter(Varien_Event_Observer $observer)
    {
    $event = $observer->getEvent();
            $order = $event->getOrder();
        $Quote =$event->getQuote();
        if (in_array($Quote()->getCheckoutMethod(), array('register','customer'))):

            if Mage::app()->getFrontController()->getParam('is_subscribed', false)){
        $status = Mage::getModel('newsletter/subscriber')->subscribe($Quote->getBillingAddress()->getEmail());
         }
        endif;
    }

}

Etapa 3: criar o módulo app/etc/modules/Stackexchange_Magento52274.xmle o código é

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento52274>
      <active>true</active>
      <codePool>local</codePool>
      <version>1.0.0</version>
    </Stackexchange_Magento52274>
  </modules>
</config>

Etapa 4: e também precisa adicionar um campo de boletim informativo em billing.phtmlum

<input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />

2
Provavelmente, isso poderia ser um pouco de limpeza - no mínimo, parte do código em "Módulo completo" não corresponde ao código anteriormente na resposta.
9556 Mike

2
bom, apenas isso -> getBillingAddress () -> getEmail () nem sempre recebe o email, especialmente quando há um email paypal envolvido. O getCustomerEmail é mais seguro.
Claudiu Creanga

Por favor, desconsidere esta resposta. Não tenho ideia de como isso poderia levar tantos votos. Isso não vai funcionar! Você não pode acessar os campos do formulário de cobrança nos checkout_submit_all_afterobservadores. Por favor, dê uma olhada nesta implementação: magento.stackexchange.com/questions/219460/…
Michael Thessel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.