我用观察者开发了一个自定义的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来说是个新手。知道为什么这个购物车对象在我的观察者中是空的吗?
答案 0 :(得分:3)
在购物车结帐代码中很容易混淆 - 这里使用的模式与Magento的其他部分略有不同。
checkout/cart
对象(Mage_Checkout_Model_Cart
)不直接存储数据。它更像是一种服务模型,用于对与结账相关的逻辑进行分组,并管理在PHP会话中存储某些信息。
您认为购物车项目(衬衫,鞋子等)的项目实际上是报价项目。您可以使用购物车对象上的方法获取
对引用对象的引用
对引用项集合的引用
报价对象包含有关潜在订单和订货人的信息(客户信息,地址信息,送货方式等)
引用项集合包含有关可能订购的项目的信息。
要从购物车中获取报价,您可以使用此类代码
$quote = $cart->getQuote();
var_dump(
$quote->getData()
);
要从购物车中获取报价项,您可以使用此类代码
$items = $cart->getItems();
foreach($items as $item)
{
var_dump(
$item->getData()
);
}
报价对象是(或应该)与您从订单中获得的报价参考相同。
希望能够指引你。祝你的项目好运!
答案 1 :(得分:1)
你没有获取单身,你所做的是用
产生一个新对象Mage::getModel()
这个对象显然是一个干净/空/新对象