問題を解決しようとしていますが、何の成功もありません。私は、Magento API注文情報リクエストでいくつかの追加情報を送付する必要があります。残念ながら、Magentoにはこれに関連するイベントはないようですので、そのクラスを上書きしてイベントを送信します。それは、私が$result
の配列を新しい情報で変更するときに、うまくいっています。しかし、うまくない部分は、変更された配列が元のディスパッチコードに戻って表示されることはありません。ここでMagentoイベントディスパッチング/ディスパッチ対象の観察/変更
は発送です:ここでは
class Company_Module_Model_Order_Api extends Mage_Sales_Model_Order_Api {
public function info($orderIncrementId) {
$result = parent::info($orderIncrementId);
$order = $this->_initOrder($orderIncrementId);
Mage::dispatchEvent("company_api_order_info_add",
array('result' => &$result, 'order' => &$order));
// - I've tried with and without the ampersand
Mage::log($result['affiliate_text']); // Debugging
return $result;
}
}
はウォッチャーコードは次のとおりです。
class Company_Other_Model_Api
{
public function hookToSetAffiliate ($observer) {
$result = $observer->getResult();
$order = $observer->getOrder();
if ($order->getAffiliateCode()) {
$affiliate = Mage::getModel('affiliates/info')
->load($order->getAffiliateCode());
if (is_object($affiliate))
$result['affiliate_text'] = $affiliate->getCode();
}
Mage::log($result['affiliate_text']); // Shows up here
return $observer;
}
}
}
あなたは$result
が適切で来ていない理由を任意のアイデアを持っていますか?フックでは、正しく表示されますが、ディスパッチメソッドの次の行が表示されたときには'affiliate_text'
は表示されません。ちょうどあなたの参照のための
おかげで、
JMAX
ところで、 "is_object($ affiliate))"の呼び出しは必要ありません。あなたの設定が壊れていない限り、Mage :: getModelはあなたのモデルのインスタンスを常に返すべきです。それが有効なレコードであることを確認したい場合は、おそらく "if($ affiliate-> getId())"が必要なものです。 –