问题
I have created the following config.xml file:
<config>
<global>
<helpers>
<awesome>
<class>CommissionJunction</class>
</awesome>
</helpers>
</global>
</config>
I have added the following php file: as Data.php
<?php
class CommissionJunction extends Mage_Core_Helper_Data
{
/**
* Get SKU, quantity, price and discount amount for each product in a given order
* @param object $order
* @return array
*/
private function _getOrderProductsList($order)
{
$orderItems = $order->getAllItems();
$purchasedSkus = array();
$count_orderItems = count($orderItems);
for($i = 0; $i < $count_orderItems; $i++) {
$purchasedSkus[$i] = array(
'ITEM' => $orderItems[$i]['sku'],
'QTY' => number_format($orderItems[$i]['qty_ordered'],0), // no decimals
'AMT' => number_format($orderItems[$i]['price'],2), // 2 decimal places
'DCNT' => number_format(abs($orderItems[$i]['discount_amount']),2)
);
}
return $purchasedSkus;
}
/**
* Get the Universal Data (JSON) Object for Commission Junction.
* This object contains the order details passed on to Commission Junction for reporting purposes
* on the Checkout Success / Order Confirmation page.
* Notes:
* - CID, TYPE AND CURRENCY are hard coded
* @param string $orderId
* @return JSON object Universal Data Object for Commission Junction $json_masterTmsUdp
*/
public function getCommissionJunctionUdo($orderId)
{
$order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
$udo = array();
$udo['CID'] = 'XXXX';
$udo['TYPE'] = 'XXXX';
$udo['CURRENCY'] = 'USD';
$udo['OID'] = $orderId;
$udo['DISCOUNT'] = number_format(abs($order->discount_amount),2);
$order_coupon_code = $order->coupon_code;
if(!is_null($order_coupon_code) && !empty($order_coupon_code))
{
$udo['COUPON'] = $order_coupon_code;
}
$udo['PRODUCTLIST'] = self::_getOrderProductsList($order);
if(Mage::getModel('core/cookie')->get('aff_commissionjunction') == 'cjafflx')
{
$udo['FIRECJ'] = "TRUE";
}
else
{
$udo['FIRECJ'] = "FALSE";
}
$masterTmsUdo['CJ'] = $udo;
$json_masterTmsUdo = json_encode($masterTmsUdo);
return $json_masterTmsUdo;
}
}
Then in succes.phtml I added this:
<script>var MasterTmsUdo = <?php echo Mage::helper('commissionjunction')->getCommissionJunctionUdo($this->getOrderId()); ?></script>
<script>/*DO NOT ALTER *** tpd*/(function(e){var t="1340",n=document,r,i,s={http:"http://cdn.mplxtms.com/s/MasterTMS.min.js",https:"https://secure-cdn.mplxtms.com/s/MasterTMS.min.js"},o=s[/\w+/.exec(window.location.protocol)[0]];i=n.createElement("script"),i.type="text/javascript",i.async=!0,i.src=o+"#"+t,r=n.getElementsByTagName("script")[0],r.parentNode.insertBefore(i,r),i.readyState?i.onreadystatechange=function(){if(i.readyState==="loaded"||i.readyState==="complete")i.onreadystatechange=null}:i.onload=function(){try{e()}catch(t){}}})(function(){});</script>
Errors: 1. My success page is not rendering correctly, the template is lost. 2. I got the following in system.log
014-08-09T21:33:07+00:00 ERR (3): Warning: include(Mage/Commissionjunction/Helper/Data.php): failed to open stream: No such file or directory in /home/theprint/public_html/preprod/lib/Varien/Autoload.php on line 93
2014-08-09T21:33:07+00:00 ERR (3): Warning: include(Mage/Commissionjunction/Helper/Data.php): failed to open stream: No such file or directory in /home/theprint/public_html/preprod/lib/Varien/Autoload.php on line 93
回答1:
magento needs class name like Packagename_Modulename_Helper
config.xml
<config>
<global>
<helpers>
<CommissionJunction>
<class>CompanyName_CommissionJunction_Helper</class>
</CommissionJunction>
</helpers>
</global>
</config>
and in your class head:
class CompanyName_CommissionJunction_Helper_Data extends Mage_Core_Helper_Abstract
then you can call with: Mage::helper('CommissionJunction');
回答2:
I can see at least 3 mistakes:
Your helper class can't be called just
CommissionJunction
. The name must contain all the path starting from namespace of your extension likeMage_Core_Helper_Data
does. And if your file is called Data.php, then helpr class name must end with Data. So it should look like Namespace_Extension_Helper_Data.In config you declare that your helpers should be referenced by string awesome, but in template you're trying to get helper by string commissionjunction. So you should change it either in config.xml, or in the template.
And in config.xml class tag you have to write the path to the helper folder. Something like Namespace_Extension_Helper.
来源:https://stackoverflow.com/questions/25223346/warning-include-failed-to-open-stream-no-such-file-or-directory-in-magento-hel