
Mage , and be called NewsletterSubscribe .Mage_NewsletterSubscribe.xml in the app/etc/modules folder:  <? xml version = "1.0"?>
 <config>
     <modules>
         <Mage_NewsletterSubscribe>
             <active> true </ active>
             <codePool> local </ codePool>
         </ Mage_NewsletterSubscribe>
     </ modules>
 </ config> app/code/local/Mage/NewsletterSubscribe , and the config.xml configuration file in the app/code/local/Mage/NewsletterSubscribe/etc folder:  <? xml version = "1.0"?>
 <config>
     <global>
         <helpers>
             <newslettersubscribe>
                 <class> Mage_NewsletterSubscribe_Helper </ class>
             </ newslettersubscribe>
         </ helpers>
     </ global>
 </ config> Data.php file in the Helper folder:  <? php
 class Mage_NewsletterSubscribe_Helper_Data extends Mage_Core_Helper_Abstract {
 } app\design\frontend\default\sunnyD\template\checkout\onepage\payment\methods.phtml . Add a tick:  ...
 <? php / * bof Subscribe for newsletter checkbox * /?>
 <dt> Join Our Mailing List </ dt>
 <dd>
     <input type = "checkbox" name = "NewsletterSubscribe" id = "NewsletterSubscribe" checked = "checked" />
     <label for = "NewsletterSubscribe"> <? php echo Mage :: helper ('newslettersubscribe') -> __ ('would
 </ dd>
 <? php / * eof Subscribe for newsletter checkbox * /?>
 ... <script type = "text / javascript"> payment.init (); </ script>
  <script type = "text / javascript"> payment.init (); </ script>
 <script type = "text / javascript"> $ ('NewsletterSubscribe'). disabled = false; </ script>   <? xml version = "1.0"?>
 <config>
     ...
     <global>
         <models>
             <checkout>
                 <rewrite>
                     <type_onepage> Desitex_Checkoutnewsletter_Model_Checkout_Type_Onepage </ type_onepage>
                 </ rewrite>
             </ checkout>
     ...
 </ config> Mage_Checkout_Model_Type_Onepage is replaced by the module class Desitex_Checkoutnewsletter_Model_Checkout_Type_Onepage (which is inherited from the original class Mage_Checkout_Model_Type_Onepage ). In this class, only one method is redefined:  <? php
 class Desitex_Checkoutnewsletter_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage
 {
     public function saveBilling ($ data, $ customerAddressId)
     {
         if (isset ($ data ['is_subscribed']) &&! empty ($ data ['is_subscribed'])) {
             $ this-> getCheckout () -> setCustomerIsSubscribed (1);
         }
         else {
             $ this-> getCheckout () -> setCustomerIsSubscribed (0);
         }
         return parent :: saveBilling ($ data, $ customerAddressId);
     }
 } saveBilling action occurs when the user moves from the input page to the billing address (presses the Continue button). Here the module saves the value of its checkbox “subscribe to news” in the current session (or checkout ...). After that calls the original method of the standard class.Model/Onepage.php class in the Model/Onepage.php file:  <? php
 class Mage_NewsletterSubscribe_Model_Onepage extends Mage_Checkout_Model_Type_Onepage {
     public function savePayment ($ data) {
         if (isset ($ _ POST ['NewsletterSubscribe'])) {
             $ this-> getCheckout () -> setNewsletterSubscribe ((bool) $ _POST ['NewsletterSubscribe']);
         }
         else {
             $ this-> getCheckout () -> setNewsletterSubscribe (false);
         }
         return parent :: savePayment ($ data);
     }
 } etc/config.xml :  <? xml version = "1.0"?>
 <config>
     <global>
         <models>
             <checkout>
                 <rewrite>
                     <type_onepage> Mage_NewsletterSubscribe_Model_Onepage </ type_onepage>
                 </ rewrite>
             </ checkout>
         </ models>
     ...
 </ config> Checkoutnewsletter module. Those. This is not an ordinary event for which an arbitrary number of listeners can subscribe. Potential difficult problems to solve in the future: (checkout_type_onepage_save_order event. To subscribe to it, you need to change the configuration of the module etc/config.xml :  <? xml version = "1.0"?>
 <config>
     <global>
         ...
         <events>
             <checkout_type_onepage_save_order>
                 <observers>
                     <mage_newslettersubscribe_observer>
                         <type> singleton </ type>
                         <class> newslettersubscribe / observer </ class>
                         <method> onOrderSave </ method>
                     </ mage_newslettersubscribe_observer>
                 </ observers>
             </ checkout_type_onepage_save_order>
         </ events>
     </ global>
 </ config> Mage_NewsletterSubscribe_Model_Observer::onOrderSave ) when the user places an order. Now create this class and method - file /Model/Observer.php :  <? php
 class Mage_NewsletterSubscribe_Model_Observer extends Mage_Core_Helper_Abstract {
     public function onOrderSave ($ observer) {
         $ isCustomerSubscribed = (bool) Mage :: getSingleton ('checkout / session') -> getNewsletterSubscribe ();
         if ($ isCustomerSubscribed) {
             $ quote = $ observer-> getEvent () -> getQuote ();
             $ session = Mage :: getSingleton ('core / session');
             try {
                 $ status = Mage :: getModel ('newsletter / subscriber') -> subscribe ($ quote-> getBillingAddress () -> getEmail ());
                 if ($ status == Mage_Newsletter_Model_Subscriber :: STATUS_NOT_ACTIVE) {
                     $ session-> addSuccess (Mage :: helper ('checkoutnewsletter') -> __ ('Confirmation request your newsletter subscription'));
                 }
             }
             catch (Mage_Core_Exception $ e) {
                 $ session-> addException ($ e, Mage :: helper ('checkoutnewsletter') -> __ ('There was a problem with the newsletter subscription:% s', $ e-> getMessage ()));
             }
             catch (Exception $ e) {
                 $ session-> addException ($ e, Mage :: helper ('checkoutnewsletter') -> __ ('There was a problem with the newsletter subscription'));
             }
         }
         return $ this;
     }
 } Mage::getModel('newsletter/subscriber')->subscribe(<user email>);Source: https://habr.com/ru/post/70049/
All Articles