Kontrollkästchen Newsletter im Abrechnungsformular hinzufügen


11

Ich möchte den Checkbox-Newsletter in das Abrechnungsformular aufnehmen, wenn der Benutzer sich direkt beim Checkout-Vorgang registriert. Wie kann ich das tun?


2
Haben Sie Pläne, MailChimp für Ihre Newsletter-Versandanforderungen zu verwenden? Die MageMonkey-Erweiterung von ezbizmarts verfügt über eine Konfigurationsoption, mit der Sie dem Checkout-Prozess eine Newsletter-Anmeldung hinzufügen können.
Darren Felton

Antworten:


15

Hallo, Sie können dies hinzufügen, indem Sie den folgenden Code unter billing.phtml hinzufügen

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

Mit der Veranstaltung checkout_submit_all_afterabonnieren Sie den Kunden für den 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>

Und der Observer-Code lautet:

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

Volles Modul:

Schritt 1: Erstellen Sie die Datei config.xml unter app/code/local/Stackexchange/Magento52274/etc/und der Code lautet

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

Schritt 2: Erstellen Observer.phpum app/code/local/Stackexchange/Magento52274/Model/und Code ist

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

}

Schritt 3: Modul erstellen app/etc/modules/Stackexchange_Magento52274.xmlund Code ist

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

Schritt 4: Außerdem muss ein Newsletter-Feld bei billing.phtmla hinzugefügt werden

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

2
Dies könnte wahrscheinlich eine kleine Bereinigung erfordern - zumindest stimmt ein Teil des Codes unter "Volles Modul" nicht mit dem Code weiter oben in der Antwort überein.
Mike

2
schön, nur dass -> getBillingAddress () -> getEmail () die E-Mail nicht immer erhält, besonders wenn es sich um eine Paypal-E-Mail handelt. getCustomerEmail ist sicherer.
Claudiu Creanga

Bitte ignorieren Sie diese Antwort. Ich habe keine Ahnung, wie dies zu so vielen positiven Stimmen führen könnte. Das wird nicht funktionieren! Sie können in checkout_submit_all_afterBeobachtern nicht auf Abrechnungsformularfelder zugreifen . Bitte werfen Sie einen Blick auf diese Implementierung: magento.stackexchange.com/questions/219460/…
Michael Thessel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.