2013-01-18 45 views
0

在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)?

回答

0

我不知道這catalog_product_get_final_price將工作如你所願,所以我建議的另一個解決方案是從Mage_Directory_Model_Currency覆蓋formatTxt

在該函數中,您可以檢查價格是否有小數,如果您希望價格沒有小數(如xx.00),請設置選項$options['precision']=0;

如:

public function formatTxt($price, $options=array()) 
{ 
    if(is_numeric($price) && floor($price) == $price){ 
    $options['precision']=0; 
    } 
    return parent::formatTxt($price, $options); 
} 
+0

哇,我得到了通過創建一個擴展做工精美並把你的功能擴展的型號/ Currency.php裏面有:'類Myname_Myextension_Model_Currency擴展Mage_Directory_Model_Currency {...}'。你能解釋爲什麼這個工作嗎?我一直在研究PHP幾個月,並沒有完全理解重寫方法。這個新的formatTxt函數是否完全取代了舊的? 「parent :: formatTxt」究竟做了什麼?它在原來的formatTxt功能添加代碼的其餘新formatTxt功能的結束? – iakkam

+0

是基本上決定,如果價格有這種形式,例如150.00或150.000與「if」語句,並設置選項精確到零,然後調用從父類的功能,所以從父函數的所有代碼會被執行,唯一的區別是,你控制精度參數告訴父函數如何用小數來格式化價格。 –

+0

優秀。感謝這個實用教程。很有幫助。 – iakkam

0

你可以在catalog_product_get_final_price使用觀察爲:

config.xml文件:

<config> 
    <frontend> 
     <events> 
      <catalog_product_get_final_price> 
       <observers> 
        <catalogrule> 
         <class>myextension/observer</class> 
         <method>processFrontFinalPrice</method> 
        </catalogrule> 
       </observers> 
      </catalog_product_get_final_price> 
     </events> 
    </frontend> 
</config> 
在觀察者類

<?php 
public function processFrontFinalPrice($observer) 
{ 
    $product = $observer->getEvent()->getProduct(); 
    $finalPrice = 123.45; //modify your price here 
    return $this; 
} 
?> 
+0

我覺得摩爾多瓦是正確的。這種方法不再在最新版本的Magento [catalog_product_get_final_price不dispached道具(http://www.magentocommerce.com/bug-tracking/issue?issue=10777)的作品 – iakkam

相關問題