Как вернуть ошибку на этапе доставки с помощью getOrderShippingCost()

Я работаю над модулем-носителем. Цена доставки динамически извлекается с удаленного сервера. После этого цена включается в детали заказа с помощью метода getOrderShippingCost() в modulename.php. Итак, когда клиент указывает правильный адрес, все работает нормально, цена рассчитывается правильно. Но если в каком-либо поле адреса есть ошибка, например, почтовый индекс не найден, цена просто устанавливается в 0.

Вместо 0 я хотел бы вставить примечание о том, какое поле неверно, и заблокировать носитель, но не скрывать его.

Я могу определить, какое поле неверно, по ответу удаленного сервера, но как мне отобразить эту информацию на этапе доставки заказа? На данный момент как раз использую return false, если есть ошибка. Так что перевозчик просто не показан.

Вот основная схема кода, которую я использую прямо сейчас:

public function getOrderShippingCost($params)
{
  ...
  if (no errors found)
    return $ret['total'];
  else
    return false;
    // instead of return false I would need something like
    // Tools::displayError('Error text'), or trigger a JS event
}

PS 1.5.4.1


person Amazzing    schedule 10.05.2014    source источник


Ответы (1)


Если кому-то еще это нужно, вот как мне удалось отобразить предупреждающее сообщение:

public function getOrderShippingCost($params)
{
  ...
  //error is defined as public variable
  $this->carrierError = $ret['errormsg'];
  if (no errors found)
    return $ret['total'];
  else
    return false;
  // when false is returned, carrier is not displayed, but warning message is displayed using hookDisplayHeader
}

public function hookDisplayHeader($params)
{
  if (isset($this->carrierError) &&
  Tools::getValue('controller') == 'order' &&
  Tools::getValue('step') == '2')
  {
     //running JS do display a warning message that carrier may be available if you fix the wrong field
     ...
  }
}
person Amazzing    schedule 16.05.2014