我在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'));
}
}
答案 0 :(得分:0)
请检查一下,您可以通过此代码获得可配置的产品数量:
if($product->getTypeId()=='configurable' || $product->getTypeId()=='bundle')
{
foreach ($item->getChildren() as $child)
{
$quentity = $item->getQty() * $child->getQty();
}
}
else
{
$quentity = $item->getQty();
}