agregar casilla de verificación Boletín en forma de facturación

11

Me gustaría agregar el boletín de la casilla de verificación en el formulario de facturación cuando el usuario elija registrarse directamente en el proceso de pago. ¿Cómo puedo hacer eso?

gianis6
fuente
2
¿Tiene algún plan para utilizar MailChimp para sus necesidades de envío de boletines informativos? La extensión MageMonkey de ezbizmarts tiene una opción de configuración para agregar el registro del boletín al proceso de pago.
Darren Felton

Respuestas:

15

hola puedes agregar esto agregando el siguiente código en billing.phtml

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

utilizando el evento checkout_submit_all_aftersuscriba al cliente al boletín

  <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>

Y el código del observador es:

   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:

Paso 1: crea config.xml en app/code/local/Stackexchange/Magento52274/etc/y el código es

<?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> 

Paso 2: crear Observer.phpen app/code/local/Stackexchange/Magento52274/Model/y el código es

<?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;
    }

}

Paso 3: crea el módulo app/etc/modules/Stackexchange_Magento52274.xmly el código es

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

Paso 4: Y también es necesario agregar un campo de boletín en billing.phtmlun

<input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />
Amit Bera
fuente
2
Probablemente esto podría necesitar un poco de limpieza; al menos, parte del código en "Módulo completo" no coincide con el código anterior en la respuesta.
Mike
2
bueno, solo eso -> getBillingAddress () -> getEmail () no siempre recibe el correo electrónico, especialmente cuando hay un correo electrónico de PayPal involucrado. getCustomerEmail es más seguro.
Claudiu Creanga
Por favor, ignore esta respuesta. No tengo idea de cómo esto podría obtener tantos votos a favor. ¡Esto no funcionará! No puede acceder a los campos del formulario de facturación en los checkout_submit_all_afterobservadores. Eche un vistazo a esta implementación: magento.stackexchange.com/questions/219460/…
Michael Thessel