2013-11-06 5 views
2

Я знаю, что есть куча ответов и вопрос с аналогичной проблемой, но я сообщу в начале. Я не спрашиваю о моем собственном методе доставки, но обо всех доступных методах.Изменить цену на методы доставки на лету

Я нашел код, который я использовал для этого, странно: он работал некоторое время - не знаю, что я изменил, что он остановился.

class Oversizeshipping_Model_Observer 
    extends Varien_Event_Observer 
{ 
    public function appendPriceToShipping($observer) 
    { 
     $address = $observer->getQuoteAddress(); 
     #Mage::log($address->getAddressType(), Zend_Log::DEBUG, 'event.log', true); 
     if($address->getAddressType() === $address::TYPE_SHIPPING){ 
      $price = 0; 
      $resource = Mage::getResourceModel('catalog/product'); 
      foreach($address->getAllItems() as $item) { 
       try { 
        $oversizePrice = $resource->getAttributeRawValue($item->getProduct()->getId(), 'oversize_shipping_price', $item->getStoreId()); 
       } catch(Exception $e) { 
        $oversizePrice = 0; 
       } 
       if($oversizePrice > 0) { 
        $price += $oversizePrice; 
       } 
      } 

      $address->setShippingAmount($price); 
      $address->setBaseShippingAmount($price); 

      $rates = $address->collectShippingRates() 
        ->getGroupedAllShippingRates(); 
      foreach ($rates as $carrier) { 
       foreach ($carrier as $rate) { 
        $rate->setPrice((float)$rate->getPrice()+$price); 
        $rate->save(); 
       } 
      } 
      $address->save(); 
     } 
    } 
} 

Этот метод наблюдатель обстрелял sales_quote_address_collect_totals_after. Как я уже говорил, он работал (добавлял цену даже на бесплатные методы доставки), но он прекратился.

Может кто-нибудь указать мне опечатку, пропущенный вызов метода или smth?

+0

версии и история изменений для победы – arkonautom

+0

Varien_Event_Observer не имеет ничего общего с этим. Может быть, я буду ждать кого-то, кто знает пурпурный, но спасибо за ваши усилия. – golaod

+0

Извините, мое плохое. Не заметил тег magento, хотя это был какой-то общий язык. – arkonautom

ответ

0

Прежде всего я удалил код:

$address->setShippingAmount($price); 
$address->setBaseShippingAmount($price); 

Это было принуждая дополнительную цену, чтобы быть видимым в целом, как общая стоимость доставки, вместо дополнительных цена + цена способ доставки.

Также добавлено:

$address->setCollectShippingRates(false); 

непосредственно перед:

$rates = $address->collectShippingRates() 
       ->getGroupedAllShippingRates(); 

и сосредоточил свой вопрос с не обновленными ценами ставок.

Extra:

же наблюдатель может быть использован для отключения некоторых ставок. Просто используйте: управление

$rate->isDeleted(true); 
+0

Означает ли это, что сумма в целом соответствует сумме? Я получаю старые ценности! – John

+0

Собственно, это изменилось. Мне нужно время, чтобы выкапывать несколько проектов, чтобы найти окончательное решение, которое я сделал. – golaod

+0

@golaod Не могли бы вы показать окончательное решение, которое вы нашли, пожалуйста? Я пытаюсь добиться того же самого и не могу заставить его работать. – enenen

Смежные вопросы