Как проверить версию 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
- один из них может вернуть нужный вам номер ревизии.