使用可配置产品的每件产品运费

时间:2015-10-23 15:38:55

标签: php magento

我在Magento CE 1.8上使用每个产品扩展的免费开源统一费率。基本上它只是创建一种新的运输方法,您可以在产品级别控制该方法的价格。

我的问题是我正在使用带有儿童简单产品的可配置产品。我正试图设定儿童简单产品的运费率即。特定选项只需5美元,如果我将该选项添加到购物车,它会正确显示运费5美元,但如果我添加3的数量,它仍会显示5美元而不是15美元。

知道如何在购物车中正确计算儿童产品的shipCost吗?

使用此表达式计算运费,其中 shipCost 是您输入费率的产品的自定义属性:

$shippingPrice += $item->getQty() * $shipCost;

我在想这个问题在这里:

if($product->getTypeId()=='configurable' || $product->getTypeId()=='bundle') {
    continue;
  }

这是完整的代码:

class Magebuzz_Flatrateperproduct_Model_Carrier_Flatrateperproduct
extends Mage_Shipping_Model_Carrier_Abstract
implements Mage_Shipping_Model_Carrier_Interface {       
protected $_code = 'flatrateperproduct';
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {           
    if (!$this->getConfigFlag('active')) {
        return false;
    }
        $shippingPrice =0;
        if ($request->getAllItems()) {
            foreach ($request->getAllItems() as $item) {
                $product = Mage::getModel('catalog/product')->load($item->getProductId());
      if($product->getTypeId()=='configurable' || $product->getTypeId()=='bundle') {
        continue;
      }
                $shipCost= $product->getShipCost();                         
                if($shipCost==null || $shipCost==0){
                $shippingPrice += $item->getQty() * $this->getConfigData('price');                       
                }
                    else{
                                $shippingPrice += $item->getQty() * $shipCost;  
                    }
            }
        }                   
            $result = Mage::getModel('shipping/rate_result');           
            if ($shippingPrice !== false) {
                $method = Mage::getModel('shipping/rate_result_method');
                $method->setCarrier('flatrateperproduct');
                $method->setCarrierTitle($this->getConfigData('title'));
                $method->setMethod('flatrateperproduct');
                $method->setMethodTitle($this->getConfigData('name'));  
                $method->setPrice($shippingPrice);
                $method->setCost($shippingPrice);
                $result->append($method);
                       }
            return $result;
}
public function getAllowedMethods()
   {
        return array('flatrateperproduct'=>$this->getConfigData('name'));
   }
}

1 个答案:

答案 0 :(得分:0)

请检查一下,您可以通过此代码获得可配置的产品数量:

if($product->getTypeId()=='configurable' || $product->getTypeId()=='bundle') 
          {           
              foreach ($item->getChildren() as $child) 
                {
                 $quentity = $item->getQty() * $child->getQty();
                }

          }
        else
        {
                $quentity = $item->getQty();
        }