我正在为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")>
试试这个:
set ($releaseLocalService = $serviceLocator.findService("com.liferay.portal.service.ReleaseLocalService"))
#set ($release = $releaseLocalService.getRelease(1))
#set ($vers = $release.getBuildNumber())
<span class="simpleVersion">$vers</span>
Pratiks的答案应该有效如果您将其从Velocity移植到Freemark并从一组受限变量中删除serviceLocator
(控制面板->配置->系统设置->模板引擎->Freemarker(:
<#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模块,选择"templatecontextcontributor"作为要派生的项目模板,然后编辑其主类以遵循下面的代码。此外,您还需要自己编写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
中添加的所有公共方法——其中一个方法可以返回您需要的修订号。