1

我想根据用户的喜好在页面中使用不同的货币。用户可以将其默认货币设置为英镑、欧元或美元。但是所有页面都已经写有英镑的价格,即'£'

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

我不想编辑所有创建的页面。这将非常费力。我也看了Zend_Currencyhelper ,但我认为在那种情况下它无济于事。任何建议如何解决问题?

4

4 回答 4

1

您不想通过后处理来做到这一点。相反,在输出货币时使用视图助手来反映用户的区域设置。

于 2012-07-06T17:40:35.253 回答
1

假设:我假设如果您根据用户偏好更改货币,其他内容也可能会略有变化。本质上,您允许您的用户做的是根据他们的具体情况定制语言环境。

getTranslationList() 使您可以访问多种类型的本地化信息。如果您想在无需翻译的情况下向客户显示本地化数据,这些信息将非常有用。它们已经可供您使用。

以下代码将为您提供大量可以使用的语言环境设置(认真检查本文底部的链接):

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

最重要的是,您可以获得的一些值:

  • 货币符号
  • NameToCurrency
  • CurrencyToName
  • 货币四舍五入
  • 货币分数
  • 货币到地区
  • 区域到货币

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

于 2012-07-06T17:50:00.443 回答
1

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

另请参阅此问题,其中包含 Bill Karwin 的答案。

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

于 2012-07-07T15:58:14.403 回答
0

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

于 2012-07-06T17:40:26.907 回答