我怎么能整合一些代码是在我的自定义模块在magento html标签上呈现


How can I integrate some code that is being rendered on html tag within my custom module in magento

我有一个CJ附属模块,它已经工作得很好:

请查看此处的结构:http://screencast.com/t/21tsCh9loPSc

模块有一个admin部分,其中填写了一些设置:Cookie生存期、关联id等

然后我必须在成功页面上的HTML标签上生成JSON对象。这个文件叫做udo。

我是否可以将其集成到模块本身?http://screencast.com/t/jkJhKbHvk2

土当归。php文件代码

<?php
class xxx_Commissionjunction_Helper_Data extends Mage_Core_Helper_Abstract
{
    /**
     * 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()
    {
        $lastOrderId = Mage::getSingleton('checkout/session')
            ->getLastRealOrderId();
        $orderId = Mage::getModel('sales/order')
            ->loadByIncrementId($lastOrderId)
            ->getEntityId();
        $order = Mage::getModel('sales/order')->load($orderId);
        $udo = array();
        //$udo['CID'] = '1531288';
        $udo['CID'] = Mage::getStoreConfig('luisvalenciasection/luisvalenciagroup/cid');

        $LastOrdertime= $order->getCreatedAt();
        $OrderCollection=Mage::getModel('sales/order')->getCollection()->addFieldToFilter('customer_email',$order->getData('customer_email'))
            ->setOrder('created_at','asc');
        $fstoredetime= $OrderCollection->getFirstItem()->getCreatedAt();
        if($fstoredetime==$LastOrdertime)
        {
            // new customer
            //$udo['TYPE'] = '373626';
            $udo['TYPE'] = Mage::getStoreConfig('luisvalenciasection/luisvalenciagroup/type_new_customer');
        }
        else
        {
            //old customer
            //$udo['TYPE'] = '373627';
            $udo['TYPE'] = Mage::getStoreConfig('luisvalenciasection/luisvalenciagroup/type_old_customer');
        }
        $udo['CURRENCY'] = 'USD';
        $udo['OID'] = $order->getIncrementId();
        $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('ref') == 'cj') {
            $udo['FIRECJ'] = "TRUE";
        }
        else {
            $udo['FIRECJ'] = "FALSE";
        }
        $masterTmsUdo['CJ'] = $udo;
        $json_masterTmsUdo = json_encode($masterTmsUdo);
        Mage::log('Udo: '.$json_masterTmsUdo, null, 'cj.log');
        return $json_masterTmsUdo;
    }
}
?>
<script>var MasterTmsUdo = <?php $myObject = new xxx_Commissionjunction_Helper_Data(); echo $myObject->getCommissionJunctionUdo(); ?></script>
<script>/*DO NOT ALTER *** The Printer Depo*/(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>

我不知道你打算通过指定告诉我们什么,你需要集成一个p)html文件与您的自定义模块,通过显示您的文件结构。是的,当然,模板文件是在你的模块结构之外。但是你不能将模板文件附加到你的模块上(结构方面)。一旦你仔细想想,就会发现这是简单而合乎逻辑的。试想一下,Magento是如何将模板文件集成到它的核心模块的,即使模板(php文件),js和css文件驻留在它的模块范围之外(结构方面)。

所以我们有一个后端逻辑和视图逻辑分开在magento的两个部分。Magento现在使用一个称为布局XML的层,用于连接这两个部分。

Magento Modules   <------->   Layout        <-----------> view files
(lives in app/code)   (app/design/.../layout)   (templates :- app/design/.../templates
                                                       css,js,images :- skin)

所以布局站在模块和视图之间,连接它们。这种方法的优点是两个

  1. 这使得Magento具有高度可扩展性

  2. 这使得不同的逻辑在结构上分开。重要的是,我们现在可以知道视图逻辑驻留在哪里,控制器驻留在哪里,模型驻留在哪里。这些逻辑是分离的,最重要的是相互独立的。

这是另一种方法。Magento在其中使用模块方法。意思是每个模块都有不同的用途,并且相互独立。这意味着,如果我们在一个模块中做了任何更改,它不会改变任何其他模块的逻辑。每个模块都有自己的Model和控制器。这意味着模块可以单独与数据库对话,并可以将自己的模块连接到视图。因为每个模块都以这种方式创建自己的世界,所以模块之间是完全独立的。

现在,为了与视图部分通信,Magento使用布局层。这是连接所有事物的地方。布局用于设置模板,js和css的每个模块在Magento。因此,他们可以访问其中的模块属性并执行魔术!!布局是每个模块相互联系的地方。因此,研究Magento使用的布局层是非常重要的。

overview
Module1                                                      TEMPLATES(hold design)
|
------ controllers(private)                                      
|                                                             JS
------ Models(private)          LAYOUTS                       Css
                          (Here every logics unites)         Images
Module2
Module3
so on
(resides app/code)        (resides app/design../layout)      (reside app/design/..template and in skin)

等等一旦你掌握了它,Magento就会开始服从你……否则她会表现出犹豫。她真是个调皮的女孩。这就是我爱她的原因。