Using custom services or liferay services in liferay themes (velocity templates)?

前端 未结 2 1945
心在旅途
心在旅途 2021-01-06 15:31

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

相关标签:
2条回答
  • 2021-01-06 15:53

    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.

    1. create a hook plugin with following liferay-hook.xml definition

      <hook>
          <portal-properties>portal.properties</portal-properties>
      </hook>
      
    2. 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
      
    3. create com.my.custom.action.MyCustomPreAction class in your hook that will extend com.liferay.portal.kernel.events.Action

    4. 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);
      }
      
    5. 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())
      
    0 讨论(0)
  • 2021-01-06 16:02

    It is possible.

    1. 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'))
      
    2. 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.

    0 讨论(0)
提交回复
热议问题