Expected functionality: user checks the "Subscribe" checkbox in the OnePage Checkout's review step and is subscribed to the newsletter.
So far I have managed to target the right event (after submitting checkout form):
config.xml
<events>
<checkout_submit_all_after>
<observers>
<checkout_newsletter>
<class>News_Custom_Model_Observer</class>
<method>assignNewsletter</method>
</checkout_newsletter>
</observers>
</checkout_submit_all_after>
</events>
info.phtml contains
<div class="text-left mt10 mb30">
<div class="input-checkbox">
<input id="subscribe_newsletter" type="checkbox" name="is_subscribed" value="1" checked="checked">
<label for="is_subscribed">Subscribe for newsletter</label>
</div>
</div>
Observer.php
public function assignNewsletter(Varien_Event_Observer $observer)
{
$event = $observer->getEvent();
$order = $event->getOrder();
$quote = $event->getQuote();
if ($observer->getRequest()->getParam('is_subscribed', false)) {
Mage::log('got here');
Mage::getModel('newsletter/subscriber')->subscribe($quote->getCustomerEmail());
} else {
Mage::log($observer->getRequest()->getParams());
}
}
What happends is that $observer->getRequest()->getParams()
only contains shipping method. So the issue is to pass/capture the data from checkout view to observer.
Any help or guidance is much appreciated.
Best Answer
First, make sure that you template code iss inside a
<form>
tag.add first observer to
controller_action_predispatch_checkout_onepage_saveOrder
to store user input in checkout sessionadd second observer to
checkout_type_onepage_save_order_after
to subscribe user after order is placed