Как отменить тариф доставки?


Как отменить настройку скорости доставки из переменной _rates в Mage_Shipping_Model_Rate_Result?

object(Mage_Shipping_Model_Rate_Result)#663 (2) {
["_rates":protected]=>
array(2) {
  [0]=>
  object(Mage_Shipping_Model_Rate_Result_Method)#1585 (7) {
    ["_data":protected]=>
    array(6) {
      ["carrier"]=>
      string(5) "fedex"
      ["carrier_title"]=>
      string(15) "Federal Express"
      ["method"]=>
      string(20) "GROUND_HOME_DELIVERY"
      ["method_title"]=>
      string(13) "Home Delivery"
      ["cost"]=>
      string(5) "27.33"
      ["price"]=>
      float(27.33)
    }
    ["_hasDataChanges":protected]=>
    bool(true)
    ["_origData":protected]=>
    NULL
    ["_idFieldName":protected]=>
    NULL
    ["_isDeleted":protected]=>
    bool(false)
    ["_oldFieldsMap":protected]=>
    array(0) {
    }
    ["_syncFieldsMap":protected]=>
    array(0) {
    }
  }
  [1]=>
  object(Mage_Shipping_Model_Rate_Result_Method)#3391 (7) {
    ["_data":protected]=>
    array(6) {
      ["carrier"]=>
      string(8) "fred_3pl"
      ["carrier_title"]=>
      string(13) "Local Courier"
      ["method"]=>
      string(6) "b2c_a1"
      ["method_title"]=>
      string(24) "Free Delivery (Same Day)"
      ["cost"]=>
      float(0)
      ["price"]=>
      float(0)
    }
    ["_hasDataChanges":protected]=>
    bool(true)
    ["_origData":protected]=>
    NULL
    ["_idFieldName":protected]=>
    NULL
    ["_isDeleted":protected]=>
    bool(false)
    ["_oldFieldsMap":protected]=>
    array(0) {
    }
    ["_syncFieldsMap":protected]=>
    array(0) {
    }
  }
}
 1
Author: LDusan, 2013-06-14

2 answers

Поскольку вы не даете никакого контекста в своем вопросе, вот как отменить настройку скорости из защищенного свойства $_rates экземпляра Mage_Shipping_Model_Rate_Result.

Интерфейс класса предлагает только метод для извлечения всех ставок или для добавления отдельных, вам необходимо использовать отражение для изменения значения свойства.

$ratesProperty = new \ReflectionProperty('Mage_Shipping_Model_Rate_Result', '_rates');
$ratesProperty->setAccessible(true);
$rates = $ratesProperty->getValue($rateResultInstance);
unset($rates[0]); // Unset the rate you don't want
$ratesProperty->setValue($rateResultInstance, $rates);

Было бы лучше просто запретить Magento добавлять метод, который вам не нужен в первую очередь. Но для того, чтобы указать вам правильное направление, вам придется дать дополнительная информация, как указано в комментариях к вашему вопросу, тоже.

 5
Author: Vinai, 2013-06-17 11:11:30

Не проверено, но вы должны иметь возможность просто отменить установку объекта, который хотите удалить.

foreach($_rate as $r) {
   if($r->getMethod() == "fred_3pl")
      unset($r);
}
 0
Author: B00MER, 2013-06-17 06:43:15