代码之家  ›  专栏  ›  技术社区  ›  Runcorn

在自定义Portlet中访问Liferay全局速度变量

  •  2
  • Runcorn  · 技术社区  · 9 年前

    目前,Liferay提供了一组全局变量,如中所定义 init.vm 可以由主题模板使用。这些变量设置在 最小值.vm 位于Liferay ROOT.war内部: $PATH_TO_WEBAPPS/ROOT/html/themes/_unstyled/templates .

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

    现在进入我的问题。我使用velocity模板发送电子邮件地址 $SOME_PORTLET_NAME/src/main/webapps/template/email.vm . 我可以使用,

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

    但我不能使用Liferay提供的默认变量作为主题中使用的变量。

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

    我尝试了什么?

    • 克隆 最小值.vm 在模板内部并导入它 工作;愚蠢的我。
    • 提供到 ROOT.war 位置 最小值.vm 。它也不起作用。(我很惊讶它竟然能奏效。)

    问题:

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

    • 这可以用Java实现吗?

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

    谢谢

    1 回复  |  直到 9 年前
        1
  •  2
  •   Olaf Kock    9 年前

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

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

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

    如果这有助于您找到实际解决方案,请发布一些关于您实际解决方案的提示(或链接)