2012-07-03 94 views
3

我有一個捆綁的產品作爲這樣的數組:(從PARAMS需要時添加產品到購物車)如何獲得Magento的捆綁產品價格?

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

我怎麼能拿價格這個捆綁產品?

回答

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 ""; 
    } 
} 
+0

雖然你的代碼有點問題,但是價格並不總是與指定選項的價格相匹配(例如,你可以在捆綁中有一個價格爲50美元的產品,但是在捆綁產品「 selection_price_value''可以被設置爲$ 10)。 – mludd

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

+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

1

可以使用getMinimalPrice()和getMaximalPrice() Mage_Bundle_Product_Price類中的函數,這些函數專門爲包產品編寫。

1

@凱文,很棒的工作。我個人需要稍作修改。在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(); 
} 
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)); 

    } 
0

雖然我敢肯定你已經找到你需要的東西幾年前的我不太清楚在哪裏接受的答案你會把你的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(); 
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模型。 適用於固定和動態價格類型,甚至兼容可配置軟件包擴展。從設計/基/默認/模板/包/目錄/產品採取/ price.phtml

0

我解決它通過自己的方法,不能確定其接受或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),我們可以計算我們自定義選定產品的價格。

相關問題