Как проверить версию Liferay в шаблоне FreeMarker? - PullRequest
1 голос
/ 10 марта 2020

Я работаю над темой для Liferay, которая будет sh работать с версиями 7.2 и 7.3 Liferay. Как я могу проверить, какая версия используется в шаблоне, чтобы я мог сделать код следующим образом:

    <#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 ]

1 голос
/ 11 марта 2020

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

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

<span class="simpleVersion">$vers</span>
0 голосов
/ 03 апреля 2020

Ответ 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>

Если вы не хотите go маршрут, позволяющий кому-либо с разрешениями редактирования шаблонов на вашем экземпляре Liferay в основном загружать любой service и, следовательно, любые данные на сервере (потому что, если вы сделаете serviceLocator неограниченным, он будет доступен даже в шаблонах фрагментов страницы) ... ну, тогда вам нужно будет ввести нужные переменные, используя a TemplateContextContributor: Просто создайте новый модуль Liferay , выбрав «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;

}

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

...