我有一个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)
所以布局站在模块和视图之间,连接它们。这种方法的优点是两个
这使得Magento具有高度可扩展性
这使得不同的逻辑在结构上分开。重要的是,我们现在可以知道视图逻辑驻留在哪里,控制器驻留在哪里,模型驻留在哪里。这些逻辑是分离的,最重要的是相互独立的。
这是另一种方法。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就会开始服从你……否则她会表现出犹豫。她真是个调皮的女孩。这就是我爱她的原因。