我正在尝试从 Magento 1.9.0.1 中的 sales_order_shipment_track_save_after
事件获取跟踪号。由于某些原因,该事件似乎不包括装运,因为 $observer->getEvent()->getShipment()
返回 NULL
。我使用了错误的事件吗?
这些是我的代码的相关部分:
config.xml(模块)
<events>
<sales_order_shipment_track_save_after>
<observers>
<pixelstore_sms>
<type>model</type>
<class>pixelstore_sms/observer</class>
<method>shipments</method>
</pixelstore_sms>
</observers>
</sales_order_shipment_track_save_after>
</events>
Observer.php(模型)
public function shipments($observer) {
$event = $observer->getEvent();
$shipment = $event->getShipment();
if (!$shipment) {
Mage::log('shipments event did not contain shipment', null, 'track.log');
return false;
}
// We never reach this far
$trackings = $shipment->getAllTracks();
$tracking = end($trackings);
$trackingId = $tracking->getNumber();
// Here I would prefer to have the tracking ID in $trackingId
}
您可能已经猜到了,if
语句匹配。 get_class()
表明观察者是Varien_Event_Observer
。
我是观察到了错误的事件,还是我应该调用其他方法来获取跟踪 ID?
最佳答案
我发现该事件包含 track
键下的 Mage_Sales_Model_Order_Shipment_Track
对象。这意味着我可以使用 $event->getData('track')
、$event['track']
或仅使用 $event- 从事件中获取它>getTrack()
。所以这就是最终解决我的问题的方法:
public function shipments(Varien_Event_Observer $observer) {
$event = $observer->getEvent();
$track = $event->getTrack();
$trackingId = $track->getNumber();
// The shipment itself can be found in the track object,
// and the order inside the shipment object:
$shipment = $track->getShipment();
$order = $shipment->getOrder();
}
这完全是对实际事件中包含的内容的误解。
关于php - 从 Magento 中的货件跟踪事件获取跟踪 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194356/