2012-11-22 68 views
6

在1.6+版本的Magento中存在一個突出的缺陷,當選擇某個選項時,等級等級的節省百分比默認爲100%。其他捐助者建議從Magento等級價格 - 爲y等級購買x價格的等級聲明 - javascript

for (var i = 0; i < this.tierPrices.length; i++) { 

改變圍繞線747 product.js是

for (var i = 0; i > this.tierPrices.length; i++) { 

這樣可以解決問題與儲蓄%,但從未執行的代碼塊。我不是一個Javascript專家,但是這個塊似乎是在選擇選項時更新等級和節省的百分比。我想找到問題的根源,而不是「評論它」。

從我調試Firebug中,我注意到,對於一線價格類是錯誤的product.js,因此,0級的價格進行檢索,佔爲何%的儲蓄始終是100%。 螢火蟲顯示的價格爲

class="tier-prices product-pricing"> 
     Buy 10 for 
     <span class="price">$40.00</span> 

而product.js試圖如果更改上面

$$('.tier-prices .price).each(function (el) { 

的端價位進行搜索而檢索使用

$$('.price.tier-' + i).each(function (el) { 

的對象,但對於產品上的多個等級價格,無法單獨引用它們。上面的類「價格」沒有唯一的標識符或迭代數字聲明。

哪裏類=「價格」,宣佈爲一級價格是多少?在tierprices.phtml的代碼,它看起來像這樣

<?php echo $this->__('Buy %1$s for %2$s each', $_price['price_qty'], $_price['formated_price'])?> 
+0

很好的問題+1對於那 –

回答

6

我剛剛花了一些時間在這,因爲它是真正開始來煩我後,我升級了客戶的Magento站點到1.7.0.2。

有兩個部分,我要說明位置和修復,但這些不會是升級證明(爲此,您將創建這些文件的副本並將它們放到您的主題特定文件夾中,儘管我不確定是否可以使用JS文件)。

1)查看修復

在文件/design/frontend/base/default/template/catalog/product/view/tierprices.phtml

需要更換線32-34

$_product = $this->getProduct(); 
$_tierPrices = $this->getTierPrices(); 
$_finalPriceInclTax = $this->helper('tax')->getPrice($_product, $_product->getFinalPrice(), true); 

用下面的代碼:

$_product = $this->getProduct(); 
$_tierPrices = array(); 

foreach($this->getTierPrices() as $index => $info) { 
    $_tierPrices[$index] = $info; 
    $_tierPrices[$index]['formated_price'] = str_replace('class="price"', 'class="price tier-'.$index.'"', $info['formated_price']); 
    $_tierPrices[$index]['formated_price_incl_tax'] = str_replace('class="price"', 'class="price tier-'.$index.' tier-'.$index.'-incl-tax"', $info['formated_price_incl_tax']); 
} 
$_finalPriceInclTax = $this->helper('tax')->getPrice($_product, $_product->getFinalPrice(), true); 

此修復問題班級不能像你已經想出的那樣正確地呈現出來。 Here is where I found this code - 雖然它沒有解決所有的問題,因此JS的變化。

2)JS修復文件中

js/Varien/product.js需要更換線路757-769

$$('.benefit').each(function (el) { 
    var parsePrice = function (html) { 
     return parseFloat(/\d+\.?\d*/.exec(html)); 
    }; 
    var container = $(this.containers[3]) ? this.containers[3] : this.containers[0]; 
    var price = parsePrice($(container).innerHTML); 
    var tierPrice = $$('.price.tier-' + i); 
    tierPrice = tierPrice.length ? parseInt(tierPrice[0].innerHTML, 10) : 0; 
    var $percent = Selector.findChildElements(el, ['.percent.tier-' + i]); 
    $percent.each(function (el) { 
     el.innerHTML = Math.ceil(100 - ((100/price) * tierPrice)); 
    }); 
}, this); 

有了這個:

// 
// Code fixed to prevent the redundant inner loop and to use actual tiered pricing in calculation 
// It also takes the optional price variants into consideration (eg: +£2 for a blue tshirt) 
// Note: I've made this comment deliberately large, to keep the line numbers in sync 
// 
var parsePrice = function (html) { 
    return parseFloat(/\d+\.?\d*/.exec(html)); 
}; 
var container = $(this.containers[3]) ? this.containers[3] : this.containers[0]; 
var price = parsePrice($(container).innerHTML); 
$$('.percent.tier-' + i).each(function (el) { 
    el.innerHTML = Math.ceil(100 - ((100/price) * (this.tierPrices[i] + parseFloat(optionPrices)))); 
}, this); 

我希望這可以節省至少一人幾個小時的生活。

T

+1

感謝Tr1stan,作品一種享受。 – GenAtBlueJalappeno

+0

謝謝,效果很好。不要忘記,如果你在你的皮膚中有一個自定義的product.js,你應該在那裏修改它。 – Jonathan

+0

謝謝,你爲我節省了很多時間! – fahu

0

的部分class="price"Mage_Directory_Model_Currency::formatPrecision()結果,當$this->formatPrice()或更深的模型層的價格被格式化 與Mage::helper('core')->formatPrice();

您可以添加執行通過擴展(並重寫)Mage_Directory_Model_Currency的唯一標識符,但請注意,formatPrecision無處不在。所以你可以編寫你自己的助手/模型邏輯來格式化價格。