Использование пользовательских сервисов или сервисов LifeRay в темах LifeRay (шаблоны скорости)?
Как использовать метод пользовательских сервисов в темах LifeRay в скоростных файлах, таких как init_custom.vm
, portal_normal.vm
и т.п.
Я вижу, что liferay предоставляет множество переменных вспомогательных служебных классов, таких как $portalUtil
за PortalUtil
, $getterUtil
за GetterUtil
и так далее, внутри init.vm
файл.
Так можно ли получить экземпляр моих пользовательских сервисов, как экземпляр com.my.custom.service.MyCustomLocalServiceImpl
или услуги liferay от UserLocalServiceImpl
?
Вот некоторый код psuedo, чтобы дать представление о том, что мне нужно:
// this code calls method from MyCustomLocalServiceImpl class to fetch items
#set ($listOfItems = $myCustomLocalServiceUtil.getAllItems())
// this code calls method from UserLocalServiceImpl class to fetch users
#set ($listOfUsers = $userLocalServiceUtil.getUsers(0, 99))
Окружающая среда: Liferay 6.1 CE GA1
2 ответа
Это возможно.
Следующий код показывает, как получить услуги:
// Fetching instance of my custom services #set ($myCustomLocalService = $serviceLocator.findService('myCustomServices-portlet', 'com.my.custom.service.MyCustomLocalService')) // Fetching instance of UserLocalServiceImpl #set ($userLocalService = $serviceLocator.findService('com.liferay.portal.service.UserLocalService'))
Затем просто вызовите методы сервиса:
#set ($listOfItems = $myCustomLocalService.getAllItems()) #set ($listOfUsers = $userLocalService.getUsers(0, 99))
Для Liferay 6.1 CE GA1: я нашел этот классVelocityVariablesImpl
(см. методы, такие какinsertHelperUtilities
,insertVariables
) который фактически делает все переменные и вспомогательные утилиты доступными для шаблонов скорости.
Вы можете расширить контекст скорости, используемый в теме, с помощью пользовательских переменных и сервисов, используя следующий подключаемый модуль. Допустим, вам нужно использовать свой локальный сервис.
создать подключаемый модуль со следующим определением liferay-hook.xml
<hook> <portal-properties>portal.properties</portal-properties> </hook>
создать portal.properties в
main/resources
(когда вы используете Maven) или вdocroot/WEB-INF/src
(когда вы используете плагины SDK), поместите туда следующую конфигурациюservlet.service.events.pre=com.my.custom.action.MyCustomPreAction
Создайте
com.my.custom.action.MyCustomPreAction
класс в вашем крючке, который будет расширятьсяcom.liferay.portal.kernel.events.Action
воплощать в жизнь
run
метод@Override public void run(final HttpServletRequest request, final HttpServletResponse response) throws ActionException { Map<String, Object> vmVariables = (Map<String, Object>) request.getAttribute(WebKeys.VM_VARIABLES); if (vmVariables == null) { vmVariables = new HashMap<String, Object>(1); } vmVariables.put("myCustomServiceUtil", com.my.custom.service.MyCustomLocalServiceUtil.class); request.setAttribute(WebKeys.VM_VARIABLES, map); }
после того, как ваш хук развернут, вы можете использовать свой собственный сервис в шаблоне скорости вашей темы
// this code calls method from MyCustomLocalServiceImpl class to fetch items #set ($listOfItems = $myCustomServiceUtil.getAllItems())