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());
}

または、私のマジェント モジュールを使用できます: https://github.com/head82/KH_ExtendedBundlePriceマジェント 1.7 でテスト済み

于 2012-07-29T12:00:21.403 に答える
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 に答える