我开发了一个自定义Magento模块,带有一个观察者:
<?xml version="1.0"?>
<config>
<modules>
<ADF_Evoucher>
<version>1.0.0</version>
</ADF_Evoucher>
</modules>
<frontend>
[...]
<events>
[...]
<sales_order_save_before>
<observers>
<ADF_Evoucher_Model_Observer>
<class>evoucher/observer</class>
<method>salesOrderSaveBeforeObserve</method>
</ADF_Evoucher_Model_Observer>
</observers>
</sales_order_save_before>
</events>
</frontend>
[...]
</config>
和我的观察者:
<?php
class ADF_Evoucher_Model_Observer extends Varien_Event_Observer
{
public function __construct()
{
}
public function salesOrderSaveBeforeObserve($observer)
{
$order = $observer->getEvent()->getOrder();
$quote = $order->getQuote();
$cart = Mage::getModel('checkout/cart');
Zend_Debug::dump($quote);
Zend_Debug::dump($cart);
die();
}
}
?>
问题是我的购物车是空的,而我确实在里面添加了一些项目:
object(Mage_Checkout_Model_Cart)[458]
protected '_summaryQty' => null
protected '_productIds' => null
protected '_data' =>
array (size=0)
empty
protected '_hasDataChanges' => boolean false
protected '_origData' => null
protected '_idFieldName' => null
protected '_isDeleted' => boolean false
protected '_oldFieldsMap' =>
array (size=0)
empty
protected '_syncFieldsMap' =>
array (size=0)
empty
我不明白为什么。也许我做错了什么,我对Magento不太熟悉。
在购物车结帐代码中很容易混淆—这里使用的模式与Magento的其他部分略有不同。
checkout/cart
对象(Mage_Checkout_Model_Cart
)不直接存储数据。它更像是一个服务模型,用于对与签出相关的逻辑进行分组,并管理在PHP会话中存储某些信息。
您认为是购物车中的商品(一件衬衫、一双鞋等)实际上是报价商品。使用cart对象上的方法获取
-
引用对象
-
对报价项集合的引用
报价对象包含有关潜在订单和订货人的信息(客户信息、地址信息、送货方法等)
报价项的集合包含有关可能订购的项的信息。
要从购物车中获取报价,您可以使用如下代码
$quote = $cart->getQuote();
var_dump(
$quote->getData()
);
要从购物车中获取报价项目,可以使用如下代码
$items = $cart->getItems();
foreach($items as $item)
{
var_dump(
$item->getData()
);
}
引用对象是(或应该是)您从订单中获得的相同引用。
希望这能指引你正确的方向。祝你的项目好运!
你不是在获取一个单例,你所做的是用
生成一个新对象Mage::getModel()
这个对象显然是一个干净/空/新对象