Php – magento sales_order_place_after observer not working

magentoPHP

I have created an event observer that will send email on order completion.
I am sending email to email_address1 when a product is ordered from the category1 and sending email to email_address2 when a product is ordered from the cateogory2. Therefore I have created an observer event for this.

But when I click on the "Place Order" button nothing happens. What is the problem?

in magento/app/etc/modules/Custom_Email.xml:

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

in magento/app/code/local/Custom/Email/etc/config.xml:

<?xml version="1.0"?>
<config>
    <global>
        <models>
            <customemail>
                <class>Custom_Email_Model</class>
            </customemail>
        </models>
<events>
        <sales_order_place_after>
            <observers>
                <custom_email_order_observer>
                    <type>singleton</type>
                    <class>customemail/order_observer</class>
                    <method>sendOrder</method>
                </custom_email_order_observer>
            </observers>
        </sales_order_place_after>
    </events>
        </global>
</config>

in magento/app/code/local/Custom/Email/Model/Order/Observer.php:

<?php
class Custom_Email_Model_Order_Observer
{
    public function __contruct()
    {

    }

    /**
     * Exports new orders to an xml file
     * @param Varien_Event_Observer $observer
     * @return Feed_Sales_Model_Order_Observer
     */
public function sendOrder($observer){
    $order = $observer->getEvent()->getOrder(); 
    $cat_id = Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
    echo $cat_id;
            //Implement logic here
            ...

    $emailTemplate  = Mage::getModel('core/email_template')
                    ->loadDefault('rehab');                            
    $emailTemplateVariables = array();
    $emailTemplateVariables['order'] = $order;      
    $emailTemplate->setSenderName('Your shops name');
    $emailTemplate->setSenderEmail('addres@from.com');
    $emailTemplate->setTemplateSubject('Subject');
    $emailTemplate->send('to@addres.com','Name', $emailTemplateVariables);  
echo 'email sent';      
 }
 }
 ?>

So any one know where is the problem?

Best Answer

The layer does not exist in the order context, nor is the category from which the product was selected available as a property of quote or order items. It's a known deficiency in Magento which unfortunately limits segmentation.

Related Topic