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