1

我正在为 Liferay 开发一个主题,我希望同时使用 Liferay 7.2 和 7.3 版本。我如何检查模板中使用的版本,所以我可以做这样的代码:

    <#if liferay_version == "7.3">
      <p>Liferay 7.3</p>
    <#elseif liferay_version == "7.2">
      <p>Liferay 7.2</p>
    </#if>

更新(21/08):
我尝试了使用assign来获取服务(因为set不能在模板中使用),serviceLocator但是null.<#assign releaseLocalService = serviceLocator.findService("com.liferay.portal.service.ReleaseLocalService")>

4

2 回答 2

1

尝试这个 :

set ($releaseLocalService = $serviceLocator.findService("com.liferay.portal.service.ReleaseLocalService"))
#set ($release = $releaseLocalService.getRelease(1))
#set ($vers = $release.getBuildNumber())

<span class="simpleVersion">$vers</span>
于 2020-03-11T05:31:18.097 回答
0

如果您将其从 Velocity 移植到 FreemarkerserviceLocator一组受限变量(控制面板 -> 配置 -> 系统设置 -> 模板引擎 -> Freemarker)中删除, Pratiks 的答案应该可以工作:

<#assign 
  releaseLocalService = serviceLocator.findService("com.liferay.portal.service.ReleaseLocalService")
  release = releaseLocalService.getRelease(1)
  vers = release.getBuildNumber()
/>
<span class="simpleVersion">${vers}</span>

如果您不想允许任何有权编辑 Liferay 实例上的模板的人基本上加载任何服务,因此也加载服务器上的任何数据(因为如果您使 serviceLocator 不受限制,它甚至可以在页面片段模板)...好吧,那么您将需要使用以下方法注入您需要的变量TemplateContextContributor只需创建一个新的 Liferay Module,选择“template-context-contributor”作为要从中派生的项目模板,然后将其主类编辑为按照下面的代码。此外,您需要自己编写MyHelper类(在同一个模块中)并用@Component(immediate = true, service = MyHelper.class).

package my.own.template.context.contributor;

import com.liferay.portal.kernel.template.TemplateContextContributor;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import my.own.template.object.MyHelper;

@Component(
    immediate = true,
    property = "type=" + TemplateContextContributor.TYPE_GLOBAL,
    service = TemplateContextContributor.class
)
public class MyDisplayTemplateContextContributor
    implements TemplateContextContributor {

  @Override
  public void prepare(Map<String, Object> contextObjects, HttpServletRequest httpServletRequest) {
    contextObjects.put("myHelper", _myHelper);
  }

  @Reference(unbind="-")
  MyHelper _myHelper;

}

部署该模块后,您的 Liferay 实例中的所有 Freemarker 模板都应具有变量myHelper,以及您在类中添加的所有公共方法MyHelper——其中一个可以返回您需要的修订号。

于 2020-04-03T17:26:54.087 回答