0

こんにちは、製品の価格帯を表示したいと思います。カスタム オプションがある場合のみです。基本価格で価格を表示できるこのコードがありますが、製品にオプションがある場合はオプション価格のみを表示し、オプションがない場合は通常の基本価格を表示します。

                <!-- code change to show price ranges -->
            <div class="price-box"><span class="regular-price">
<?php
$product = Mage::getModel('catalog/product')->load($_product->getId());
$prodPrice = $product->getPrice();
if($product->getOptions()){
    $minPrices=array();
    $maxPrices=array();
    foreach ($product->getOptions() as $_option) {
        switch ($_option->getType()) {
            case 'field': case 'file': case 'area': case 'date_time': case 'date': case 'time':
                if($_option->getIsRequire()){
                    $minPrices[] = ($_option->getPriceType()=='percent') ? $prodPrice*$_option->getPrice()/100 : $_option->getPrice();
                }
                $maxPrices[] = ($_option->getPriceType()=='percent') ? $prodPrice*$_option->getPrice()/100 : $_option->getPrice();
                break;
            case 'radio': case 'drop_down':
                $valuePrices=array();
                foreach ($_option->getValues() as $_value){
                    $valuePrices[] = ($_value->getPriceType()=='percent') ? $prodPrice*$_value->getPrice()/100 : $_value->getPrice();
                }
                sort($valuePrices,SORT_NUMERIC);
                if($_option->getIsRequire()){
                    $minPrices[] = $valuePrices[0];
                }
                $maxPrices[] = array_pop($valuePrices);
                break;
            case 'multiple': case 'checkbox':
                $valuePrices=array();
                foreach ($_option->getValues() as $_value){
                    $valuePrices[] = ($_value->getPriceType()=='percent') ? $prodPrice*$_value->getPrice()/100 : $_value->getPrice();
                }
                sort($valuePrices,SORT_NUMERIC);
                if($_option->getIsRequire()){
                    $minPrices[] = $valuePrices[0];
                }
                $maxPrices[] = array_sum($valuePrices);
                break;
        }
    }
    $minTotal = $prodPrice + array_sum($minPrices);
    $maxTotal = $prodPrice + array_sum($maxPrices);
    if($minTotal==$maxTotal){
        echo Mage::helper('core')->currency($minTotal);
    } else {
        echo Mage::helper('core')->currency($minTotal).'-'.Mage::helper('core')->currency($maxTotal);
    }
} else {
    echo Mage::helper('core')->currency($prodPrice);
}
?>
</span></div> 
<!-- end price range code -->
4

1 に答える 1

4

カテゴリ一覧ページで

app/design/frontend/default/{theme}/template/catalog/product/list.phtml

<?php if($_product->getRequiredOptions()) :?>
       <span class="start-at">Starting at:</span> 
       <?php // need to format currency - echo Mage::helper('core')->currency($_product->getData('min_price'), true, false) ?>
       <?php echo $_product->getData('min_price') ?> - <?php echo $_product->getData('max_price') ?>
<?php else: ?>
       <?php echo $this->getPriceHtml($_product, true); ?>
<?php endif; ?>
于 2014-06-12T19:13:47.597 に答える