Magento Bundles: отображаемая цена опций рассчитывается по цене выбора по умолчанию, а не из нуля - PullRequest
1 голос
/ 24 августа 2011

Продукт myBundle имеет myColorOption со следующими элементами:

  • Зеленый $ 50
  • Синий $ 100
  • Красный $ 100
  • Черный $ 150

Magento 1.4.2.0 по умолчанию предоставит покупателю выпадающий список с такими параметрами:

  • Зеленый + 50 $
  • Синий + 100 $
  • Красный + 100 $
  • черный + $ 150

Изменение, которое я ищу, это когда элемент по умолчанию был выбран администратором. Когда это так, каждая отображаемая цена должна быть относительно цены по умолчанию. Если администратор установит синий (цена $ 100) в качестве элемента по умолчанию для опции, раскрывающийся список должен теперь выглядеть так:

  • Зеленый - $ 50
  • синий
  • красный
  • черный + 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 ]

2 голосов
/ 19 сентября 2011

Используйте этот код

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

Заменить вышеуказанную строку на нижнюю

$defaultPrice=$this->getOption()->getDefaultSelection()->getSelectionPriceValue();
1 голос
/ 14 января 2014

Просто чтобы добавить что-то к этому ответу - я обнаружил, что код потерпит неудачу, если попытается вызвать getDefaultSelection () -> 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();
}

По сути, просто делает проверку того, что что-то возвращается из вызова getDefaultSelection () для $ this, а затем продолжает установку цены по умолчанию, в противном случае он просто продолжаетс остальной частью кода.

...