3

我有一个像这样的数组的捆绑产品:(将产品添加到购物车时从参数中获取)

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

我怎样才能得到这个捆绑产品的价格?

4

8 回答 8

6

像这样的东西也应该起作用:

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 "";
    }
}
于 2012-10-16T17:18:53.383 回答
2

您可以使用类中的getMinimalPrice()getMaximalPrice()函数Mage_Bundle_Product_Price,它们是专门为捆绑产品编写的。

于 2013-03-18T01:45:18.723 回答
2

您可以像这样使用 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));

    }
于 2013-10-22T02:06:24.290 回答
1
// 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 测试

于 2012-07-29T12:00:21.403 回答
1

@Kevin,干得好。我个人需要稍作修改。在 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();
}
于 2013-09-13T07:38:35.420 回答
1

这是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模型。适用于固定和动态价格类型,甚至与可配置捆绑扩展兼容。取自 design/base/default/template/bundle/catalog/product/price.phtml

于 2017-02-23T08:40:43.587 回答
1

我通过自己的方法解决了它,不确定它是否可以接受。发送帖子值和产品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;
}

概念:我从二维数组(问题)构建了一个一维数组。从 helper 中的函数我们可以获得捆绑产品的所有选择 id。通过匹配(使用 in_array),我们可以计算我们自定义选择产品的价格。

于 2017-06-21T12:56:37.553 回答
0

尽管我确定您在几年前就已经弄清楚了您需要什么,但我不太确定您会将参数放在已接受的答案中的哪个位置。

我发现你可以像任何其他产品一样使用 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();
于 2016-03-07T15:42:38.347 回答