2

截至目前,Liferay 提供了一组init.vm可被主题模板使用的全局变量。这些变量设置init.vm并位于 Liferay ROOT.war :$PATH_TO_WEBAPPS/ROOT/html/themes/_unstyled/templates中。

在我的自定义主题portal_normal.vm中,我可以通过简单地添加来使用它#parse ($init)。效果很好。

现在进入我的问题。我正在使用速度模板来发送我的电子邮件地址。因此,在我的 portlet 中,我在位置创建了一个电子邮件模板$SOME_PORTLET_NAME/src/main/webapps/template/email.vm。我可以使用将自定义变量发送到模板,

VelocityContext velocityContext = new VelocityContext();
velocityContext.put("vp", velocityParameters);

但我不能使用 Liferay 提供的默认变量,如主题中使用的那样。

我正在尝试$languageUtil.get在我的电子邮件模板中使用国际化。

我试过什么?

  • init.vm在模板内克隆并导入它。哪个没有用;愚蠢的我。
  • 提供 的ROOT.war位置的完整路径init.vm。它也不起作用。(我很惊讶它应该起作用。)

问题 :

  • 有没有办法在自定义 portlet(即外部主题)中使用这些速度全局变量?

  • 这可以使用Java实现吗?

  • 还是执行 LanguageUtil.get 并将值仅发送到模板更好(这将是我的最后一个选择)?

谢谢!!

4

1 回答 1

2

它可能不是完整的答案,而是从哪里开始的指针:您正在创建一个空白的 VelocityContext。这自然是空的——这并不奇怪。

当 Liferay 执行它的 init.vm 和其他模板时,它不会在空白上下文中运行(尽管 init.vm 看起来很基本)。根据您的 Liferay 版本,查找VelocityVariablesImpl或查找TemplateContextHelper脚本上下文的初始化。

请注意,这一切都存在于 portal-impl 中,因此在 Liferay 的实现中,您通常无权访问。您可能需要复制您感兴趣的代码部分,因为您通常不能直接调用它们。但是,您可能也不需要完全初始化。

如果这可以帮助您找到实际的解决方案,请发布一些关于您实际解决的问题的提示(或指向它的链接)

于 2015-02-16T08:15:09.020 回答