在Zend中渲染之前修改页面内容?

时间:2012-07-06 17:38:00

标签: php zend-framework helper helpers

我想根据用户的偏好在页面中使用不同的货币。用户可以将其默认货币设置为GBP,EUR或USD。但是所有的页面都是以GBP的价格编写的,即'£'

我不知道如何处理这个问题。首先我要在使用preDispatch()或类似的东西进行渲染之前获取页面内容,修改它然后渲染修改后的View。我可以在控制器中获取View,但只能像对象一样。另一个问题是我也提供了从控制面板编写的优惠,但它们不包含在View对象中。当我var_dump($view);视图是一个对象,但控制面板中的提议显示在屏幕上,就像普通的HTML一样。

我不想编辑所有创建的页面。这将非常费力。 我也看了Zend_Currency帮手,但我认为在那种情况下它无能为力。 有什么建议如何解决问题?

4 个答案:

答案 0 :(得分:1)

您不希望通过后期处理执行此操作。相反,在输出货币以反映用户的区域设置时使用视图助手。

答案 1 :(得分:1)

Posit:我认为如果您根据用户偏好更改货币,其他内容也可能会略有变化。基本上你允许用户做的是根据他们的具体情况定制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

答案 2 :(得分:1)

您可以向视图添加过滤器。 Matthew Turland的This article解释了这个过程,并有一个例子。

另请参阅this question,其中包含Bill Karwin的答案。

也就是说,更好的方法是使用Zend_Locale从一开始就生成正确的输出。但是在输出已经创建之后添加过滤器 - 但在它被发送到客户端之前 - 听起来像是一种处理你的特定情况的方法。

答案 3 :(得分:0)

我不熟悉Zend Framework的内部,但你应该只能使用输出缓冲区并覆盖实际呈现结果的任何函数,然后str_replace覆盖缓冲区的内容。可能不是一个特别优雅的解决方案。