Я пытался отразить некоторые функции в Magento (v1.6), как видно на другом сайте.В этом примере владелец магазина настроил возможность применения продажных цен к уровню.(скорее всего, tierprices.phtml в качестве оболочки), применяя продажную цену (скорее всего, в продажах admin / product / price)
Я пытался выяснить, как именно это делается, но пока несделал какой-то прогресс на этом, насколько.Кто-нибудь имеет какие-либо идеи, как это было построено?
Вот пример веб-сайта 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') .' <strong class="benefit">'. $this->__('save') .' '. $_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>";
}
?>