Magento Bundles:选项的显示价格是根据默认选择价格而非零来计算的

时间:2011-08-24 12:08:48

标签: php magento magento-1.4

产品myBundle的myColorOption包含以下项目:

  • 绿色$ 50
  • 蓝色$ 100
  • 红色$ 100
  • 黑色$ 150

默认情况下,Magento 1.4.2.0将向客户提供带有以下选项的选择下拉列表:

  • 绿色+ $ 50
  • 蓝色+ $ 100
  • 红色+ $ 100
  • Black + $ 150

我正在寻找的更改是管理员选择了默认项目。如果是,则每个显示的价格应该相对于默认选项的价格。如果管理员将蓝色(价格100美元)设置为该选项的默认项目,则下拉列表现在应显示为:

  • 绿色 - $ 50
  • 红色
  • Black + $ 50

澄清:我只希望下拉列表中的显示价格发生变化,添加到购物车并用于其他计算的实际价格保持不变。


更新:这是我到目前为止的代码,问题出在注释行中。我需要帮助获得正确的模型等。

<?php
// From file app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php
// copied to app/code/local/Mage/...
public function getSelectionTitlePrice($_selection, $includeContainer = true)
{
    $defaultPrice = 0.00;
    $_product = $this->getProduct();
    /*
    $_mbmo = new Mage_Bundle_Model_Option();
    $_mbmo->load($_selection->getProductId());
    $_default = $_mbmo->getDefaultSelection();
    $defaultPrice = $_product->getPriceModel()->getSelectionPreFinalPrice($_product, $_default, 1);
    */
    $price = $_product->getPriceModel()->getSelectionPreFinalPrice($_product, $_selection, 1);
    if ($price == $defaultPrice)
    {
        return $_selection->getName();
    }
    else
    {
        $sign = ($price < $defaultPrice) ?  '-' : '+';
        $diff = ($price < $defaultPrice) ? $defaultPrice - $price : $price - $defaultPrice;
        return $_selection->getName() . ' &nbsp; ' .
            ($includeContainer ? '<span class="price-notice">':'') . $sign .
            $this->formatPriceString($diff, $includeContainer) . ($includeContainer ? '</span>':'');
    }
}

2 个答案:

答案 0 :(得分:2)

使用此代码

$defaultPrice = $_product->getPriceModel()->getSelectionPreFinalPrice($_product, $_default,1);

将以上行替换为

$defaultPrice=$this->getOption()->getDefaultSelection()->getSelectionPriceValue();

答案 1 :(得分:1)

只是为这个答案添加一些内容 - 我发现如果代码尝试针对没有默认值的选项调用getDefaultSelection() - &gt; getPrice(),则代码会失败。能够通过添加以下代码来解决此问题:

$_mbmo = new Mage_Bundle_Model_Option();
$_mbmo->load($_selection->getProductId());
$_default = $_mbmo->getDefaultSelection();

if (gettype($this->getOption()->getDefaultSelection())==object){
$defaultPrice=$this->getOption()->getDefaultSelection()->getPrice();
}

基本上只是检查在$ this上调用getDefaultSelection()返回的内容然后继续设置默认价格,否则它只是继续使用其余的代码。