Как отменить тариф доставки?
Как отменить настройку скорости доставки из переменной _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) {
}
}
}
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 добавлять метод, который вам не нужен в первую очередь. Но для того, чтобы указать вам правильное направление, вам придется дать дополнительная информация, как указано в комментариях к вашему вопросу, тоже.
Не проверено, но вы должны иметь возможность просто отменить установку объекта, который хотите удалить.
foreach($_rate as $r) {
if($r->getMethod() == "fred_3pl")
unset($r);
}