2012-07-06 62 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