如何获得Magento的捆绑产品价格?

问题描述:

我有一个捆绑的产品作为这样的数组:(从PARAMS需要时添加产品到购物车)如何获得Magento的捆绑产品价格?

Array 
(
    [product] => 165 
    [bundle_option] => Array 
    (
     [17] => 47 
     [22] => 60 
     [16] => 46 
     [15] => 42 
     [14] => Array 
      (
       [0] => 39 
      ) 
    ) 
) 

我怎么能拿价格这个捆绑产品?

像这样的事情也应该工作:

public function getDisplayPrice($product) { 
    if($product->getFinalPrice()) { 
     return $product->getFormatedPrice(); 
    } else if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) { 
     $optionCol= $product->getTypeInstance(true) 
          ->getOptionsCollection($product); 
     $selectionCol= $product->getTypeInstance(true) 
           ->getSelectionsCollection(
      $product->getTypeInstance(true)->getOptionsIds($product), 
      $product 
     ); 
     $optionCol->appendSelections($selectionCol); 
     $price = $product->getPrice(); 

     foreach ($optionCol as $option) { 
      if($option->required) { 
       $selections = $option->getSelections(); 
       $minPrice = min(array_map(function ($s) { 
           return $s->price; 
          }, $selections)); 
       if($product->getSpecialPrice() > 0) { 
        $minPrice *= $product->getSpecialPrice()/100; 
       } 

       $price += round($minPrice,2); 
      } 
     } 
     return Mage::app()->getStore()->formatPrice($price); 
    } else { 
     return ""; 
    } 
} 
+0

虽然你的代码有点问题,但是价格并不总是与指定选项的价格相匹配(例如,你可以在捆绑中有一个价格为50美元的产品,但是在捆绑产品“ selection_price_value''可以被设置为$ 10)。 – mludd

// load product 
$product = new Mage_Catalog_Model_Product(); 
$product->load(165); 
$priceModel = $product->getPriceModel(); 

// get options 
$block = Mage::getSingleton('core/layout')->createBlock('bundle/catalog_product_view_type_bundle'); 
$options = $block->setProduct($product)->getOptions(); 

$price = 0; 
foreach ($options as $option) { 
    $selection = $option->getDefaultSelection(); 

    if ($selection === null) { 
    continue; 
    } 

    $price += $priceModel->getSelectionPreFinalPrice($product, $selection, $selection->getSelectionQty()); 
} 

或者,你可以使用我的Magento模块:https://github.com/head82/KH_ExtendedBundlePrice与Magento的测试1.7

+0

感谢凯文,虽然这是一个旧的答案,我们的电子商店上的一个模块正在使用您的代码来计算捆绑产品的最终价格,但它工作的很好,但如果我使用getSingleton而不是getModel来加载产品,我们这个错误 致命错误:调用未定义的方法Mage_Catalog_Model_Product_Type_Configurable :: getOptionsCollection()在/var/www/html/app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle.php on line 54 – Haris

可以使用getMinimalPrice()和getMaximalPrice() Mage_Bundle_Product_Price类中的函数,这些函数专门为包产品编写。

@凯文,很棒的工作。我个人需要稍作修改。在Magento的1.7.0.2,功能getSelectionPreFinalPrice()实际上在getSelectionPrice(),它呼吁getSelectionFinalTotalPrice()调用 - 但在这最后一部分的价格与最终价格(包括使一线定价和特殊的价格)计算,而不是原价。

我申请下面的代码片段,以获取原来的价格(不含分级定价,并没有特殊的价格):

$_normalPrice = 0; 
$_options = $_priceModel->getOptions($_product); 
foreach($_options as $_option) { 
    $_selection = $_option->getDefaultSelection(); 
    if ($_selection === null) continue; 
    $_normalPrice = $_normalPrice + $_selection->getPrice(); 
} 

可以使用Mage_Bundle_Model_Product_Price的内置静态方法calculatePrice像这样:

if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE){ 

     $pricemodel = Mage::getModel('bundle/product_price'); 

     $price = $pricemodel::calculatePrice(
      $product->getData('price'), 
      $product->getSpecialPrice(), 
      $product->getSpecialPriceFrom(), 
      $product->getSpecialPriceTo(), 
      false, 
      Mage::app()->getStore()->getWebsite()->getId(), 
      Mage::getSingleton('customer/session')->getCustomer()->getGroupId(), 
      $product->getId() 
     ); 

     $finalprice = $this->helper('core')->currencyByStore(Mage::helper('tax')->getPrice($product, $price)); 

    } 

虽然我敢肯定你已经找到你需要的东西几年前的我不太清楚在哪里接受的答案你会把你的PARAMS。

我发现那是什么,你可以得到的价格与getFinalPrice捆绑产品()就像任何其他的产品,但你可以设置使用目录/产品帮助选定的选项。

$_product = Mage::getModel('catalog/product')->load($this->getRequest()->getPost()['product']; 
    $productHelper = $this->helper('catalog/product'); 
    //getpost() contains the array you mentioned when you click add to cart 
    $_configuredProducts = $_product->getTypeInstance(true)->processConfiguration(new Varien_Object($this->getRequest()->getPost()), $_product,Mage_Catalog_Model_Product_Type_Abstract::PROCESS_MODE_FULL); 
    echo $_product->getFinalPrice(); 

下面是Magento的方式:

$_product  = $this->getProduct(); 
$_priceModel = $_product->getPriceModel(); 

list($_minimalPriceTax, $_maximalPriceTax) = $_priceModel->getTotalPrices($_product, null, null, false); 
list($_minimalPriceInclTax, $_maximalPriceInclTax) = $_priceModel->getTotalPrices($_product, null, true, false); 

假设$this->getProduct()回报Catalog/Product模型。 适用于固定和动态价格类型,甚至兼容可配置软件包扩展。从设计/基/默认/模板/包/目录/产品采取/ price.phtml

我解决它通过自己的方法,不能确定其接受或not.send岗位价值和产品ID,该模型将返回价钱。

$bundle_option = Mage::app()->getRequest()->getParam('bundle_option'); 
$bundle_option_array = call_user_func_array('array_merge', $bundle_option); 
$price = Mage::Helper('airhotels/bundle')->getBundlePrice($productid,$bundle_option_array); 

我的辅助文件是

public function getBundlePrice($productId,$bundle_option_array) { 
$product = new Mage_Catalog_Model_Product(); 
$product->load($productId); 
$price=0; 
$selectionCollection = $product->getTypeInstance(true)->getSelectionsCollection($product->getTypeInstance(true)->getOptionsIds($product), $product); 
foreach($selectionCollection as $option) 
{ 
if (in_array($option->getSelectionId(), $bundle_option_array)){ 
    $price += $option->price; 
} 
} 
return $price; 
} 

概念:我建立了一个1-d阵列从2-d阵列(问题)。从帮助程序中的函数中,我们可以获得捆绑产品的所有选择标识。通过匹配(使用in_array),我们可以计算我们自定义选定产品的价格。