在Magento中,我想將自定義PHP函數應用於前端價格顯示,而不更改後端/購物車上的實際數字價格。應用PHP函數只顯示價格而不更改購物車價格
具體而言,我想刪除顯示價格上的小數點,當價格沒有分。例如,19美元將顯示爲19美元,但19.99美元將顯示爲19.99美元。
我發現PHP.net一個PHP函數,會爲我執行這一變化:
// formats money to a whole number or with 2 decimals; includes a dollar sign in front
function formatMoney($number, $cents = 1) { // cents: 0=never, 1=if needed, 2=always
if (is_numeric($number)) { // a number
if (!$number) { // zero
$money = ($cents == 2 ? '0.00' : '0'); // output zero
} else { // value
if (floor($number) == $number) { // whole number
$money = number_format($number, ($cents == 2 ? 2 : 0)); // format
} else { // cents
$money = number_format(round($number, 2), ($cents == 0 ? 0 : 2)); // format
} // integer or decimal
} // value
return $money;
} // numeric
} // formatMoney
我不希望有改變Magento的模板,應用此功能,因爲價格出現各地地點。更新所有模板將是一場噩夢。
我想知道是否有一個地方可以使用此功能在全球範圍內格式化顯示價格,以便從一個地方影響所有價格的顯示。
我已經花了幾個小時,周圍各種Magento的文件戳,其中包括:
應用程序/代碼/核心/法師/目錄/型號/ Currency.php
公共職能格式< - 此功能改變實際價格,而不是價格的顯示。
應用程序/代碼/核心/法師/目錄/型號/ Product.php:
公共職能getFormatedPrice < - 這個功能看起來很有前途,但我沒有做任何事情。
我也看了這些文件,無需任何跳躍出作爲一個明顯的地方:
應用程序/代碼/核心/法師/目錄/座/ Product.php
應用程序/代碼/核心/法師/錄/座/產品/ Price.php
應用程序/代碼/核心/法師/目錄/座/產品/ View.php
你認爲有可能找到Magento的一個地方,我可以劈死將我的自定義PHP函數應用於價格的顯示(而不是實際的數字pri購物車中的ce)?
哇,我得到了通過創建一個擴展做工精美並把你的功能擴展的型號/ Currency.php裏面有:'類Myname_Myextension_Model_Currency擴展Mage_Directory_Model_Currency {...}'。你能解釋爲什麼這個工作嗎?我一直在研究PHP幾個月,並沒有完全理解重寫方法。這個新的formatTxt函數是否完全取代了舊的? 「parent :: formatTxt」究竟做了什麼?它在原來的formatTxt功能添加代碼的其餘新formatTxt功能的結束? – iakkam
是基本上決定,如果價格有這種形式,例如150.00或150.000與「if」語句,並設置選項精確到零,然後調用從父類的功能,所以從父函數的所有代碼會被執行,唯一的區別是,你控制精度參數告訴父函數如何用小數來格式化價格。 –
優秀。感謝這個實用教程。很有幫助。 – iakkam