2012-07-06 163 views
1

我想根據用戶的喜好在頁面中使用不同的貨幣。用戶可以將其默認貨幣設置爲英鎊,歐元或美元。但是所有的頁面已經以英鎊的價格寫入,即'£'在Zend中渲染之前修改頁面內容?

我不知道如何處理這個問題。首先,我要通過preDispatch()或類似的東西來渲染頁面內容,修改它,然後渲染修改後的視圖。我可以在控制器中看到視圖,但只能看到一個對象。另一個問題是我也提供了從控制面板寫入的提議,並且它們不包含在查看對象中。當我是var_dump($view);的視圖是一個對象,但控制面板的提供顯示在屏幕上就像正常的HTML。

我不想編輯所有創建的頁面。這將是非常費力的。 我也看過Zend_Currency幫手,但我認爲它在這種情況下無法幫助。 有什麼建議如何解決這個問題?

回答

1

您可以將過濾器添加到視圖。 Matthew Turland的This article解釋了這個過程並且有一個例子。

另請參閱this question其中有Bill Karwin的答案。

也就是說,更好的方法是使用Zend_Locale從一開始就生成正確的輸出。但是,在輸出已經創建之後添加過濾器 - 但是在將其發送到客戶端之前添加過濾器 - 聽起來像是處理您特定情況的一種方式。

+0

謝謝大衛。我會明天嘗試這種視圖過濾器,並會寫出結果。我認爲馬修·特蘭的文章將解決這個問題。 – enenen 2012-07-08 11:43:09

+0

太棒了,很高興它有幫助。謝謝,歡呼! ;-) – 2012-07-09 11:24:57

+0

唯一的問題是我無法使過濾器工作。我不知道該把它放在哪裏。嘗試了像庫,視圖/過濾器等不同的地方,但仍然收到500服務器錯誤。例如我嘗試'$ this - > _ helper-> layout-> getLayoutInstance() - > getView() - > addFilterPath(APPLICATION_PATH。'/ views/filters') - > addFilter('Minify');'in' init()和class Minify public function filter($ string) { return $ string。「TEST」; } }'爲過濾器。 – enenen 2012-07-09 12:06:47

0

我不熟悉Zend Framework的內部,但你應該能夠使用輸出緩衝區並覆蓋任何實際呈現結果的函數,然後在緩衝區的內容上覆蓋str_replace。可能不是一個特別優雅的解決方案。

+0

這是我的第一個想法,但正如我所說,我無法得到呈現View之前的純HTML。我只能得到視圖對象,而來自控制面板(後端)的產品不在其中,前端只有這些。 – enenen 2012-07-07 06:15:44

1

你不想通過後處理來做到這一點。相反,在輸出貨幣以反映用戶的區域設置時使用視圖助手。

+0

你好,邁克。我爲此寫了一個幫手。這是一個正確的方式來解決問題:http://stackoverflow.com/questions/11366810/custom-view-helper-crashes-when-gets-a-string-parameter?幫手現在崩潰,但它可以成爲一個解決方案?壞的一面是,我應該編輯應用程序中的所有頁面,這有點難。 – enenen 2012-07-07 06:20:14

1

位置:我會假設,如果您根據用戶偏好更改貨幣,其他內容也可能會稍有變化。基本上你允許你的用戶做的是根據他們的具體情況定製Locale。

getTranslationList()可讓您訪問多種類型的本地化信息。如果您想將本地化數據顯示給客戶而無需翻譯,這些信息非常有用。它們已經可供您使用。

如下因素代碼會給你噸(認真檢查在這篇文章底部鏈接)的區域設置,您可以使用:

$list = Zend_Locale::getTranslationList('language', 'de_AT'); 
print_r ($list); 

最重要的是,一些你可以得到的值:

  • CURRENCYSYMBOL
  • NameToCurrency
  • CurrencyToName
  • CurrencyRounding
  • CurrencyFraction
  • CurrencyToRegion
  • RegionToCurrency

參考:http://framework.zend.com/manual/1.11/en/zend.locale.functions.html#zend.locale.getdata

+0

感謝您使用'getTranslationList()',Francis。但有了它,我應該編輯應用程序中的所有現有頁面,對嗎? – enenen 2012-07-07 06:12:55

+0

讓我先說一句,我從未在任何應用程序中使用過Locale信息。但是,我如何設置它是通過在Bootstrap.php文件中調用getTranslationList()和用戶的語言環境信息'('language','USERS_SETTING')'(加載會話後的predispatch +)將值保存爲常量或使用Zend_Registry。在你的應用程序的任何地方你想使用這些值,從註冊表調用或使用常量 – 2012-07-07 23:47:06