Warning: include failed to open stream: No such file or directory in magento helper

淺唱寂寞╮ 提交于 2019-12-25 03:29:26

问题


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:

  1. Your helper class can't be called just CommissionJunction. The name must contain all the path starting from namespace of your extension like Mage_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.

  2. 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.

  3. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!