関数をオーバーライドしている場合はsend
、そのパラメータ$variables
である配列を使用できます。この配列には、他のデータとともにorder
オブジェクト ( $variables['order']
) が含まれています。これは、注文の電子メール、請求書、出荷、およびクレジットメモの電子メールに当てはまります。
これにより、「注文を登録する」という私の提案は冗長になります。
最初に頭に浮かぶのは、注文が行われたときにディスパッチされるイベントをキャプチャし、イベントから注文オブジェクトを Magento レジストリに保存することです。次に、オーバーライドされた関数からそのレジストリ エントリを取得できますsend
。これは、キュー プロセッサから SMS がディスパッチされるときのように、注文を送信するリクエスト中に SMS が送信され、その後ではないと仮定すると機能するはずです。
したがって、このアイデアは次のように実装できます。
オブザーバーを登録する
<config>
<!-- -->
<global>
<!-- -->
<events>
<sales_order_place_after>
<observers>
<yournodename>
<class>YourPackage_YourModule_Model_Observer</class>
<method>registerOrder</method>
</yournodename>
</observers>
</sales_order_place_after>
</events>
<!-- -->
</global>
<!-- -->
</config>
オブザーバーを実装する
class YourPackage_YourModule_Model_Observer
{
public function registerOrder(Varien_Event_Observer $observer)
{
$order = $observer->getEvent()->getOrder();
Mage::register('currentOrder', $order);
}
}
レジストリ エントリにアクセスします。
public function send()
{
$order = Mage::registry('currentOrder');
if ($order instanceof Mage_Sales_Model_Order) {
$address = $order->getBillingAddress();
if (!$order->getCustomerId()) {
//guest order
} else {
$customer = Mage::getModel('customer/customer')
->load($order->getCustomerId());
}
}
}