Liferay Portal额外研究(四):修改用户登录后 - 军军小站|张军博客

Liferay Portal额外研究(四):修改用户登录后

系统 2579 0
  Liferay 在用户第一次登陆后,都会为其产生一个默认的私有首页 Layout。 在 Liferay早期版本,可以在系统管理员管理界面中,配置默认的group layout。但是在4.1版本中已经没有这个功能,所以默认情况下,新注册的用户,在登陆后,首先看到的其私有place都是一样的内容,而这些内容都是liferay提供的。
 
    对我们自定的 Company来说,这肯定是不合适的,我们需要自己定义用户登录后,默认显示的内容和布局。
 
    后来在Liferay forum中,找到了一篇帖子,给了解决此种问题的解决办法:在portlet-ext.properties中配置一个 default.user.layout.group 属性(自定义的),用于指明默认的layout-group。在 ServicePreAction 类的扩展修改 addDefaultLayouts 操作,满足特定的需求应用。这种扩展的方式就是,将指定layout-group拷贝给用户第一默认的,这样就不会再使用liferay默认的了。—— 当然这样的方式是比较简单的,可能在系统实施过程中,有比这更加复杂的需求。

 
新建默认的 Community
首先,通过新增一个新的 Community,命名为User_Default,并新增一个private的page与内容.
 
配置默认的 Community
首先在 ext项目的 ext-ejb目录下,修改portal-ext.properties文件,增加如下设置:
 
default.user.layout.group =User_Default

然后通过 build,将portal-ext.properties移动到 ext项目的
    ext\servers\tomcat\webapps\ROOT\WEB-INF\classes 目录下。
 
构造 LayoutCopy类
public   class  LayoutCopy  ... {
    
    
private   static  Log _log  =  LogFactory.getLog(LayoutCopy. class );
    
    
private  User user;

    
private  String ownerId;

   
private  Group userGroup;
   
public  LayoutCopy(User user)  ... {
       
super ();

       
this .user  =  user;

        
this .ownerId  =  getOwnerId(user.getGroup().getGroupId(),  false );
       
this .userGroup  =  user.getGroup();
   }


   
public   void  copyDefaultUserLayout(HttpServletRequest httpReq)
           
throws  SystemException, PortalException  ... {
      
//  set in the portal-ext.properties:
       
//  default.user.layout.group=Default User
       
//  and create then group/community "Default User" 
       
//  CWPPropsUtil.DEFUALT_USER_LAYOUT_GROUP = "default.user.layout.group"
       Group group  =  GroupLocalServiceUtil.getGroup(user.getCompanyId(),
               PropsUtil.get(
" default.user.layout.group " ));

       
try   ... {
           String groupOwnerId 
=  getOwnerId(group.getGroupId(),  true );
           List privateLayouts 
=  LayoutLocalServiceUtil
                   .getLayouts(groupOwnerId);

           
for  (Iterator itr  =  privateLayouts.iterator(); itr.hasNext();)  ... {
               Layout layout 
=  (Layout) itr.next();
               Layout newLayout 
=  copyLayout(layout);
               copyPreferences(httpReq, newLayout, layout);
           }

       }
  catch  (PortalException e)  ... {
           _log.error(
" Cannot copy private layouts " , e);
       }
  catch  (Exception e)  ... {
           _log.error(
" Cannot copy public layouts " , e);
       }


       
try   ... {
           String groupOwnerId 
=  getOwnerId(group.getGroupId(),  false );
           List publicLayouts 
=  LayoutLocalServiceUtil
                   .getLayouts(groupOwnerId);

           
for  (Iterator itr  =  publicLayouts.iterator(); itr.hasNext();)  ... {
               Layout layout 
=  (Layout) itr.next();
               Layout newLayout 
=  copyLayout(layout);
               copyPreferences(httpReq, newLayout, layout);
           }

       }
  catch  (PortalException e)  ... {
           _log.error(
" Cannot copy public layouts " , e);
       }
  catch  (Exception e)  ... {
           _log.error(
" Cannot copy public layouts " , e);
       }


   }


   
public   void  resetLayout(HttpServletRequest httpReq)  throws  SystemException, PortalException  ... {
       String ownerId 
=  getOwnerId(user.getGroup().getGroupId(),  false );
       LayoutLocalServiceUtil.deleteLayouts(ownerId);
       PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);

       ownerId 
=  getOwnerId(user.getGroup().getGroupId(),  true );
       LayoutLocalServiceUtil.deleteLayouts(ownerId);
       PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);

       copyDefaultUserLayout(httpReq);
   }


   
public  Layout copyLayout(Layout groupDefaultLayout)  throws  SystemException,
           PortalException 
... {
       Layout layout 
=  LayoutLocalServiceUtil.addLayout(
               userGroup.getGroupId(), user.getUserId(), groupDefaultLayout
                      .isPrivateLayout(), groupDefaultLayout
                       .getParentLayoutId(), groupDefaultLayout.getName(user
                       .getLocale()), groupDefaultLayout.getType(),
               groupDefaultLayout.isHidden(), 
null );

       LayoutLocalServiceUtil.updateLayout(layout.getLayoutId(), layout
        .getOwnerId(), groupDefaultLayout.getTypeSettings());
       layout 
=  LayoutLocalServiceUtil.updateLookAndFeel(layout.getLayoutId(),
               layout.getOwnerId(), groupDefaultLayout.getThemeId(),

Liferay Portal额外研究(四):修改用户登录后的默认布局和内容


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论