Мой пользовательский модуль доставки не работал, потому что он не мог получить коммерческое предложение, когда заказ редактировался в бэкэнде. Это был код, который я использовал:
class Mymodule_Model_Mycarrier_Customrate
extends Mage_Shipping_Model_Carrier_Abstract
implements Mage_Shipping_Model_Carrier_Interface
{
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
$quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
Мне нужно получить текущее предложение, чтобы у меня был доступ к информации об адресе. Я делаю запрос API, который требует адрес улицы.
Теперь, если бы заказ редактировался на бэкэнде, это, очевидно, привело бы к ошибке, поскольку синглтон оформления заказа больше не актуален. Вместо этого я получаю цитату так:
$quote = Mage::getSingleton('adminhtml/session_quote')->getQuote();
В моем методе collectRates () мне нужно определить, какой синглтон загрузить. Сначала я хочу спросить, является ли это правильным способом выполнения действий, а также достаточно ли моего чека для бэкэнда:
$quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
// If admin is editing an order, find the quote by admin session.
if(Mage::getSingleton('admin/session')->isLoggedIn()){
$quote = Mage::getSingleton('adminhtml/session_quote')->getQuote();
}
Я не хочу, чтобы это впоследствии вызывало проблемы. У меня также возникает ощущение, что я могу неправильно использовать метод collectRates (), если мне нужно создать обходной путь, подобный этому.