回答:
注文がすでにシステムに存在する場合は、コアの動作を模倣save()
して、注文ステータス履歴コレクションまたはステータス履歴モデル自体を呼び出すことができます。
// just some random order object
$order = Mage::getModel('sales/order')->load(2);
$message = 'Add status history comment!';
/** @var Mage_Sales_Model_Order_Status_History $history */
$history = Mage::getModel('sales/order_status_history')
->setOrder($order)
->setStatus($order->getStatus())
->setComment($message)
->setData('entity_name', Mage_Sales_Model_Order::HISTORY_ENTITY_NAME);
// EITHER model save
$history->save();
// OR collection save
$historyCollection = $order->getStatusHistoryCollection();
$historyCollection->addItem($history);
$historyCollection->save();
注文のsave()
メソッドは呼び出されないため、イベントは送出されません。
いいえ。save
注文オブジェクトをデータベースに保持するには、注文オブジェクトを呼び出す必要があります。
これは、注文ステータス履歴タイプが他のステータス履歴タイプから抽象化されており、注文モデルがを呼び出すと、ステータス履歴コレクションから保存するステータス履歴への変更を検索するためですsave
。
Magento 1.xソースを読んで、コアでこれをどのように使用するかを確認します。この直後に、への呼び出しが続きsave
ます。
お役に立てば幸いです。
sales_convert_quote_to_order
イベントを聞くことができる場合。Mage / SalesRule / Model / Observer.phpでaddSalesRuleNameToOrder
定義された例
$order->setCouponRuleName($ruleModel->getName());
return $this;
呼び出しなし $order->save();
これをカスタムモジュールで正常に使用しました。私のオブザーバーメソッドは次のとおりです。
public function addCustomCommentToOrder(Varien_Event_Observer $observer)
{
# conveniently, Mage/Sales/Model/Convert/Quote.php gives us both the order and the quote
$order = $observer->getEvent()->getOrder();
# ...
$custom_comment = 'some useful comment';
$order->addStatusHistoryComment($custom_comment)
->setIsVisibleOnFront(True) # change this to hide it from frontend
->setIsCustomerNotified(False) # change this to email the customer or not
;
# no call to $order->save(); !
}
それが役立つことを願っています;-)