Как проверить версию Liferay в шаблоне FreeMarker?

Я работаю над темой для 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")>

2 ответа

Попробуй это:

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 в Freemarker и удалите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, выбрав "шаблон-контекст-вкладчик" в качестве производного шаблона проекта, а затем отредактируйте его основной класс в соответствии с приведенным ниже кодом. Кроме того, вам нужно будет написать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;

}

После развертывания этого модуля все шаблоны Freemarker в вашем экземпляре Liferay должны иметь переменную myHelper, со всеми общедоступными методами, которые вы добавляете в класс MyHelper - один из них может вернуть нужный вам номер ревизии.

Другие вопросы по тегам