Magento Tier销售价格?

时间:2012-02-13 09:13:15

标签: oop magento zend-framework promotions

我一直在尝试镜像一些功能 在另一个网站上看到的Magento(v1.6)。在这个例子中, 店主已设置将销售价格应用于层级的能力。 (通过应用销售价格,很可能是tierprices.phtml作为包装) (最有可能是管理/产品/价格销售)

我一直在努力弄清楚它是如何完成的,但却没有 就此而言,取得了任何进展。有谁知道这是怎么回事 构造

以下是示例网站 http://www.epromos.com/product/2801001.html

这是表格代码:

    if($_tierPrices) {
        echo '<style>
                .strikeRow      {text-decoration: line-through;}
                .saleRow td     {color:red;}
                .quantityRow    {background: #eef} 
                td              {padding:3px 9px; border: 1px solid #fc0;} 
            </style>';          // temporary styling

        $q = "<td>Quantity</td>";
        $p = "<td>{$_product->getName()}</td>";
        $s = "<td>Reduced Price</td>";

        foreach ($_tierPrices as &$tier) { 
        #$tier['tier_sale'] = '0.00';   // trick the dump into thinking there is a product sale
            if($tier['price_qty'])      { $q .= "<td>{$tier['price_qty']}</td>"; }
            if($tier['price'])          { $p .= "<td>".number_format($tier['price'], 2, '.', '')."</td>"; }
            if($tier['tier_sale'])      { $s .= "<td>{$tier['tier_sale']}</td>"; }
        }

        $q = "<tr class='quantityRow'>{$q}</tr>";
        $p = ($_tierPrices[0]['tier_sale'])? "<tr class='strikeRow'>{$p}</tr>"  : "<tr>{$p}</tr>";
        $s = ($_tierPrices[0]['tier_sale'])? "<tr class='saleRow'>{$s}</tr>"    : '';

        echo "<tbody>$q $p $s</tbody></table>";

    }

完整的消息来源:

<?php
/**
 * @see Mage_Catalog_Block_Product_View
 */
$_product = $this->getProduct();
$_tierPrices = $this->getTierPrices();
$_finalPriceInclTax = $this->helper('tax')->getPrice($_product, $_product->getFinalPrice(), true);

/** @var $_catalogHelper Mage_Catalog_Helper_Data */
$_catalogHelper = Mage::helper('catalog');

$_weeeTaxAmount = Mage::helper('weee')->getAmountForDisplay($_product);

if (Mage::helper('weee')->typeOfDisplay($_product, array(1,2,4))) {
    $_weeeTaxAttributes = Mage::helper('weee')->getProductWeeeAttributesForDisplay($_product);
}

 if (count($_tierPrices) > 0) { 

    // start table group with class type if  (obj)getInGrouped() == 1
    echo ($this->getInGrouped()) ? '<table class="tier-prices-grouped product-pricing-grouped">' : '<table class="tier-prices product-pricing">'; 

    // assign tier pricing to $_tierPrices
    if ($this->getInGrouped()) {
         $_tierPrices = $this->getTierPrices($_product);
    }

        Mage::helper('weee')->processTierPrices($_product, $_tierPrices);

    foreach ($_tierPrices as $_price) {

        echo '<tr>';

        if ($_catalogHelper->canApplyMsrp($_product)) {

            if ($this->getInGrouped()) {

                echo $this->__('Buy %1$s for', $_price['price_qty']) .':';

            } else { 

                echo $this->__('Buy %1$s', $_price['price_qty']);

            } 

        } else {

                if ($this->helper('tax')->displayBothPrices()) {

                    if (Mage::helper('weee')->typeOfDisplay($_product, 0)) {

                        echo $this->__('Buy %1$s for %2$s (%3$s incl. tax) each', $_price['price_qty'], $_price['formated_price_incl_weee_only'], $_price['formated_price_incl_weee']);

                    } elseif(Mage::helper('weee')->typeOfDisplay($_product, 1)) {

                            echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']);

                            if ($_weeeTaxAttributes) {

                                echo '(<small>';
                                echo $this->__('%1$s incl tax.', $_price['formated_price_incl_weee']);

                                $separator = ' + '; 

                                    foreach ($_weeeTaxAttributes as $_attribute) {

                                        echo $separator;
                                        echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount());

                                    }

                                echo '</small>)';

                            }

                            echo $this->__('each');

                    } elseif(Mage::helper('weee')->typeOfDisplay($_product, 4)) {

                            echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']);

                            if ($_weeeTaxAttributes) {

                                echo '(<small>';
                                echo $this->__('%1$s incl tax.', $_price['formated_price_incl_weee']);

                                $separator = ' + '; 

                                    foreach ($_weeeTaxAttributes as $_attribute) {

                                        echo $separator;
                                        echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount()+$_attribute->getTaxAmount());

                                    }

                                echo '</small>)';

                            }

                            echo $this->__('each');

                    } elseif(Mage::helper('weee')->typeOfDisplay($_product, 2)) {

                            echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price']);

                            if ($_weeeTaxAttributes) {

                                echo '(<small>';

                                    foreach ($_weeeTaxAttributes as $_attribute) {

                                        echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount());

                                    }

                                echo $this->__('Total incl. Tax: %1$s', $_price['formated_price_incl_weee']);
                                echo '</small>)';

                            }

                            echo $this->__('each');

                    } else {

                            echo $this->__('Buy %1$s for %2$s (%3$s incl. tax) each', $_price['price_qty'], $_price['formated_price'], $_price['formated_price_incl_tax']);

                    }

                } else {

                    if ($this->helper('tax')->displayPriceIncludingTax()) {

                        if (Mage::helper('weee')->typeOfDisplay($_product, 0)) {

                                echo $this->__('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_weee']);

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 1)) {

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';
                                    $separator = ''; 

                                    foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $separator;
                                            echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount());

                                        $separator = ' + '; 

                                    }

                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 4)) { 

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';
                                    $separator = ''; 

                                    foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $separator;
                                            echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount()+$_attribute->getTaxAmount());

                                        $separator = ' + ';

                                    } 

                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 2)) {

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_tax']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';

                                        foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $_attribute->getName() .': '. Mage::helper('core')->currency($_attribute->getAmount());

                                        }

                                    echo $this->__('Total incl. Tax: %1$s', $_price['formated_price_incl_weee']);
                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } else {

                                echo $this->__('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_tax']);
                        }

                    } else {

                        if (Mage::helper('weee')->typeOfDisplay($_product, 0)) {

                                echo $this->__('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price_incl_weee_only']);

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 1)) {

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';
                                    $separator = ''; 

                                        foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $separator;
                                            echo $_attribute->getName(); ?>: <?php echo Mage::helper('core')->currency($_attribute->getAmount());

                                        $separator = ' + '; 

                                        }

                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 4)) {

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price_incl_weee_only']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';
                                    $separator = ''; 

                                        foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $separator;
                                            echo $_attribute->getName(); ?>: <?php echo Mage::helper('core')->currency($_attribute->getAmount()+$_attribute->getTaxAmount());

                                        $separator = ' + '; 

                                        }

                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } elseif(Mage::helper('weee')->typeOfDisplay($_product, 2)) {

                                echo $this->__('Buy %1$s for %2$s', $_price['price_qty'], $_price['formated_price']);

                                if ($_weeeTaxAttributes) {

                                    echo '(<small>';

                                        foreach ($_weeeTaxAttributes as $_attribute) {

                                            echo $_attribute->getName(); ?>: <?php echo Mage::helper('core')->currency($_attribute->getAmount());

                                        }

                                    echo $this->__('Total incl. Tax: %1$s', $_price['formated_price_incl_weee_only']);
                                    echo '</small>)';

                                }

                                echo $this->__('each');

                        } else {

                                // concern
                                //echo $this->__('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price']);

                                $priceSchema['quantity'][] =  $_price['price_qty'];
                                $priceSchema['formated_price'][] =  $_price['formated_price'];

                        }


                    } 

        }


        } // Can apply MSRP

        if (!$this->getInGrouped()) {

        // we need this ~

            // funky ass OR switch, can i rework this in a saner way?
            if( ($_product->getPrice() == $_product->getFinalPrice() && $_product->getPrice() > $_price['price'])
             || ($_product->getPrice() != $_product->getFinalPrice() &&  $_product->getFinalPrice() > $_price['price']) ) {

//               echo ' '. $this->__('and') .'&nbsp;<strong class="benefit">'. $this->__('save') .'&nbsp;'. $_price['savePercent'] .'%';

            } 

//          echo '</strong>'; // why the hell isn't this in the OR switch??? 

        // we need this ~

        }

        if ($_catalogHelper->isShowPriceOnGesture($_product)) {

            $popupId = 'msrp-popup-' . $_product->getId() . $this->helper('core')->getRandomString(20);

            echo '<a href="#" id="'. $popupId .'">'. $this->__('Click for price') .'</a>';
            echo '<script type="text/javascript">';

            if (!$this->getInGrouped()) {

                echo 'var newLink = {';

                    echo 'url: "'. $this->getAddToCartUrl($_product, array('qty' => $_price['price_qty'])) .'",';
                    echo 'qty: "'. $_price['price_qty'] .'"';

                echo '};';

            } else {

                echo 'var newLink = {';

                    echo 'url: "'. $this->getAddToCartUrl($_product, array('qty' => $_price['price_qty'])) .'",';
                    echo 'notUseForm: true';

                echo '};';

            }

                echo 'Catalog.Map.addHelpLink(';

                    echo "$('{$popupId}'),";
                    echo '"'. $_product->getName() .'",';
                    echo json_encode($_price['real_price_html']) .',';
                    echo '"'. $this->helper('core')->currency($_product->getMsrp(),true,false) .'",';
                    echo 'newLink';

                echo ');';

            echo '</script>';

        } else {

            echo '<span class="msrp-price-hide-message">'. $_catalogHelper->getMsrpPriceMessage($_product) .'</span>';

        }

    }
}

    if($_tierPrices) {
        echo '<style>
                .strikeRow      {text-decoration: line-through;}
                .saleRow td     {color:red;}
                .quantityRow    {background: #eef} 
                td              {padding:3px 9px; border: 1px solid #fc0;} 
            </style>';          // temporary styling

        $q = "<td>Quantity</td>";
        $p = "<td>{$_product->getName()}</td>";
        $s = "<td>Reduced Price</td>";

        foreach ($_tierPrices as &$tier) { 
        #$tier['tier_sale'] = '0.00';   // trick the dump into thinking there is a product sale
            if($tier['price_qty'])      { $q .= "<td>{$tier['price_qty']}</td>"; }
            if($tier['price'])          { $p .= "<td>".number_format($tier['price'], 2, '.', '')."</td>"; }
            if($tier['tier_sale'])      { $s .= "<td>{$tier['tier_sale']}</td>"; }
        }

        $q = "<tr class='quantityRow'>{$q}</tr>";
        $p = ($_tierPrices[0]['tier_sale'])? "<tr class='strikeRow'>{$p}</tr>"  : "<tr>{$p}</tr>";
        $s = ($_tierPrices[0]['tier_sale'])? "<tr class='saleRow'>{$s}</tr>"    : '';

        echo "<tbody>$q $p $s</tbody></table>";

    }
?>

2 个答案:

答案 0 :(得分:2)

我很确定您所寻找的是期权的绝对定价,无论等级如何,如果是这样的话,这就是如何实现这一目标的链接:

http://www.magentocommerce.com/wiki/5_-_modules_and_development/catalog/use-absolute-price-for-custom-options

答案 1 :(得分:1)

这是您的快速解决方案。

您可以使用产品的“费用”字段来定义零售价格高于您的价格的百分比。默认情况下,“费用”字段用作备忘录,表明您为产品支付了多少费用,并且未在前端的任何位置使用。

然后转到主题的templates / template / catalog / product / view / tierprices.phtml,并在$_product = $this->getProduct();行之后添加以下行:

$multiplier = $_product->getData('cost');
$multiplier = $multiplier ? $multiplier : 1;

<?php endif; ?><?php if (!$this->getInGrouped()): ?>之间的以下行:

Retail price: <?php echo $_coreHelper->currency($_price['price']*$multiplier, true, false) ?>

我相信你可以按照自己的意愿设计它。如果不清楚,请告诉我。