我正在尝试解决问题,但没有取得任何成功。我需要使用Magento API订单信息请求发送一些其他信息。不幸的是,Magento似乎没有任何与此相关的事件,因此我覆盖了该类并发送了一个事件。当我使用新信息修改$result
数组时,这一切都很好。但是,不合适的部分是被修改的数组永远不会在原始调度代码中显示备份。
这是派遣:
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
答案 0 :(得分:4)
我建议你采取与Magento相同的路线。
// Wrap array in an object
$result = new Varien_Object($result);
// Dispatch - No need for & as $result and $order are both objects and passed by ref
Mage::dispatchEvent("company_api_order_info_add", array('result'=>$result, 'order'=>$order));
// Unwrap array from object
$result = $result->getData();
Varien_Object仍然允许数组访问,因此您的侦听器代码根本不需要更改。
答案 1 :(得分:0)
仅供您参考,我明白了。以下是发生的事情:当我将它分配给hookToSetAffiliate中的变量时,数组引用中断了。因此,我更改了代码以直接引用数组(并且不使用变量来提供更容易的访问),并修复了它。
JMAX