How to use custom services method in liferay themes in velocity files like init_custom.vm
, portal_normal.vm
etc.
I see liferay provides a l
You can extend velocity context used in theme with custom variables and services using following hook plugin. Let's say you need to use your custom local service.
create a hook plugin with following liferay-hook.xml definition
<hook>
<portal-properties>portal.properties</portal-properties>
</hook>
create portal.properties in main/resources
(when you use maven) or in docroot/WEB-INF/src
(when you use plugins sdk), place following configuration there
servlet.service.events.pre=com.my.custom.action.MyCustomPreAction
create com.my.custom.action.MyCustomPreAction
class in your hook that will extend com.liferay.portal.kernel.events.Action
implement run
method
@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);
}
after your hook is deployed you can use your custom service in velocity template of your theme
// this code calls method from MyCustomLocalServiceImpl class to fetch items
#set ($listOfItems = $myCustomServiceUtil.getAllItems())
It is possible.
The following code shows how to get the services:
// 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'))
Then simply call the service methods:
#set ($listOfItems = $myCustomLocalService.getAllItems())
#set ($listOfUsers = $userLocalService.getUsers(0, 99))
For Liferay 6.1 CE GA1: I found this class VelocityVariablesImpl (see methods like insertHelperUtilities, insertVariables) which actually makes all the variables and helper utilities available to the velocity templates.