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.