Reputation: 88
I must be over-thinking this issue, but I can't seem to resolve it. I need to overwrite the sendNewOrderEmail function of Mage_Sales_Model_Order. When I do this I lose my transactional email templates in the drop-down in the admin interface.
Error:
Fatal error: Class 'Mage_Order_Helper_Data' not found
/app/code/local/Mine/Sales/etc/config.xml
<?xml version="1.0"?>
<config>
<global>
<models>
<sales>
<rewrite>
<order>Mine_Sales_Model_Order</order>
</rewrite>
</sales>
</models>
<helpers>
<sales>
<class>Mine_Sales_Helper</class>
</sales>
</helpers>
<template>
<email>
<umicrosite_order_alert module="order">
<label>Vendor Order Alert</label>
<file>umicrosite_order_alert.html</file>
<type>html</type>
</umicrosite_order_alert>
</email>
</template>
</global>
</config>
/app/code/local/Mine/Model/Sales/Order.php
<?php
class Mine_Sales_Model_Order extends Mage_Sales_Model_Order
{
/**
* Send email with order data
*
* @return Mage_Sales_Model_Order
*/
public function sendNewOrderEmail()
{
$storeId = $this->getStore()->getId();
$emailTemplate = Mage::getModel('core/email_template')->loadDefault('umicrosite_order_alert');
$emailTemplate->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
$emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_sales/email'));
$emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_sales/name'));
$emailTemplate->setType('html');
$emailTemplate->setTemplateSubject('New Order from my store');
$emails = array();
foreach ($this->getItemsCollection() as $item) {
$vendor = Mage::helper('udropship')->getVendor($item->getProduct());
$email = $vendor->getEmail();
if (!in_array($email,$emails)) {
$emails[] = $email;
$emailTemplateVariables = array();
$emailTemplateVariables = array('vendor_name'=>$vendor->getVendorName());
$emailTemplate->send($email, $vendor->getVendorName(), $emailTemplateVariables);
}
}
parent::sendNewOrderEmail();
}
}
/app/code/local/Mine/Sales/Helper/Data.php
<?php
class Mine_Sales_Helper_Data extends Mage_Sales_Helper_Data
{
}
If I change my Data.php to:
class Mage_Order_Helper_Data extends Mage_Core_Helper_Abstract
It causes Class 'Mine_Sales_Helper_Data' not found.
What am I doing wrong???
Upvotes: 1
Views: 918
Reputation: 2214
You just need to extend your helper from Mage_Core_Helper_Abstract
.
<?php
class Mine_Sales_Helper_Data extends Mage_Core_Helper_Abstract
{
}
Actually you don't want to define helper for your extension, if it just rewrite a model class. So if you remove the helper definition from config.xml
file, it should work. Try it
Ah.. Why didn't I notice it before. you put this code in your config file
<config>
<global>
<models>
<sales>
<rewrite>
<order>Mine_Sales_Model_Order</order>
</rewrite>
</sales>
</models>
<helpers>
<mine_sales> <!-- helper alias; IT SHOULD BE UNIQUE; so avoid 'sales' -->
<class>Mine_Sales_Helper</class>
</mine_sales>
</helpers>
<template>
<email>
<umicrosite_order_alert module="mine_sales">
<label>Vendor Order Alert</label>
<file>umicrosite_order_alert.html</file>
<type>html</type>
</umicrosite_order_alert>
</email>
</template>
</global>
</config>
The problem was here. <umicrosite_order_alert module="order">
. Here you have specified module as order
. This in fact look for a helper with alias order
. Magento trying to find it. But it is not defined. Hence show this error.
Here you are set helper alias to mine_sales
. So you have to specify it there inside module
attribute. Now try it. It will definitely work
Note: you need to use my helper defintion here. If you use your own helper defintion, there is no problem with that. Since the class that extend your helper class is Mage_Sales_Helper_Data
which is infact a child of Mage_Core_Helper_Abstract
. But you don't need to do that. You can directly extend Mage_Core_Helper_Abstract
in this case.
Upvotes: 2