0

オブザーバーを使用して、カスタム 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 は初めてです。私のオブザーバーでこのカートオブジェクトが空である理由は何ですか?

4

2 に答える 2

3

カート チェックアウト コードで混乱するのは簡単です。ここで使用されるパターンは、Magento の他の部分とは少し異なります。

checkout/cartオブジェクト ( )はMage_Checkout_Model_Cartデータを直接保存しません。これは、チェックアウトに関連するロジックをグループ化し、PHP セッションで特定の情報の保存を管理するために使用されるサービス モデルに近いものです。

カート アイテム (シャツ、靴など) と思われるアイテムは、実際には見積もりアイテムです。カート オブジェクトのメソッドを使用して、次のいずれかを取得します。

  1. quote オブジェクトへの参照

  2. 見積もりアイテムのコレクションへの参照

quote オブジェクトには、潜在的な注文と注文者に関する情報 (顧客情報、住所情報、配送方法など) が含まれています。

見積もりアイテムのコレクションには、注文される可能性のあるアイテムに関する情報が含まれています。

カートから見積もりを取得するには、次のようなコードを使用します

$quote = $cart->getQuote();
var_dump(
    $quote->getData()
);

カートから見積もりアイテムを取得するには、次のようなコードを使用します

$items = $cart->getItems();
foreach($items as $item)
{
    var_dump(
        $item->getData()
    );
}

見積もりオブジェクトは、注文から取得する見積もり参照と同じです (または同じである必要があります)。

うまくいけば、それがあなたを正しく操縦します。あなたのプロジェクトで頑張ってください!

于 2013-06-11T13:25:00.240 に答える
1

あなたはシングルトンをフェッチしていません。あなたがしているのは、新しいオブジェクトを生成することです

Mage::getModel()

このオブジェクトは明らかにクリーン/空/新しいオブジェクトです

于 2013-06-11T13:01:33.843 に答える