ajouter la case à cocher Newsletter dans le formulaire de facturation

11

Je voudrais ajouter la newsletter de la case à cocher dans le formulaire de facturation lorsque l'utilisateur choisit de s'inscrire directement dans le processus de paiement. Comment puis-je faire cela?

gianis6
la source
2
Avez-vous des plans pour utiliser MailChimp pour vos besoins d'envoi de newsletter? L'extension MageMonkey par ezbizmarts a une option de configuration pour ajouter l'inscription à la newsletter au processus de paiement.
Darren Felton

Réponses:

15

salut vous pouvez l'ajouter en ajoutant le code ci-dessous sur billing.phtml

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

en utilisant l'événement checkout_submit_all_afterabonner le client à la 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>

Et le code Observer est:

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

Module complet:

Étape 1: créez config.xml sur app/code/local/Stackexchange/Magento52274/etc/et le code est

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

Étape 2: créer Observer.phpà app/code/local/Stackexchange/Magento52274/Model/et le code est

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

}

Étape3: créer le module app/etc/modules/Stackexchange_Magento52274.xmlet le code est

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

Étape4: Et également besoin d'ajouter un champ de newsletter à billing.phtmlun

<input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />
Amit Bera
la source
2
Cela pourrait probablement nécessiter un peu de nettoyage - au moins, une partie du code sous "Module complet" ne correspond pas au code plus tôt dans la réponse.
Mike
2
bien, juste que -> getBillingAddress () -> getEmail () n'obtient pas toujours l'email, surtout quand il y a un email paypal impliqué. getCustomerEmail est plus sûr.
Claudiu Creanga
Veuillez ignorer cette réponse. Je ne sais pas comment cela pourrait obtenir autant de votes positifs. Cela ne fonctionnera pas! Vous ne pouvez pas accéder aux champs du formulaire de facturation dans les checkout_submit_all_afterobservateurs. Veuillez jeter un œil à cette implémentation: magento.stackexchange.com/questions/219460/…
Michael Thessel