`
esffor
  • 浏览: 1363033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
  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额外研究

    【Liferay Portal额外研究】 Liferay Portal是一款开源的企业级门户平台,它提供了丰富的功能和高度的可定制性,用于构建企业内部或外部的网站、工作流应用和协作平台。在这个额外研究中,我们将探讨如何在新的...

    Liferay Portal 内容管理

    【Liferay Portal 内容管理】是企业级门户平台Liferay Portal的重要组成部分,它提供了丰富的文档管理和信息发布功能,便于组织内部的信息共享与协作。 在Liferay Portal中,文档管理主要通过【Document Library】...

    liferay portal 开发实例

    每个实例可能分别对应不同的功能或场景,例如用户登录、内容展示、互动表单等。为了运行这些实例,你需要在Eclipse中创建一个新的Liferay Portlet项目,并将提供的源代码复制到项目中。确保你的Eclipse已经配置了...

    liferay portal开发大全

    Liferay Portal 是一个开源的企业级门户平台,广泛用于构建复杂的Web应用程序和企业内部协作系统。它提供了丰富的功能,包括内容管理、社交媒体集成、工作流支持以及用户界面定制。本资源集是针对Liferay Portal开发...

    liferay Portal 的学习书籍

    Liferay Portal是一种开源的企业门户解决方案,支持使用Java语言构建企业内部网(intranets)和其他协作平台。根据提供的内容片段,我们可以了解到一些关于Liferay Portal书籍的具体信息,这本书是外国人编写的,受...

    Liferay Portal Systems Development

    作者曾经在2008年至2010年间出版了四本关于Liferay的书籍,并且他也是Liferay与其他技术集成的专家,比如与广告服务器OpenX、不同搜索引擎、企业内容(包括视频、音频、图片、文档、记录和网页内容)、社交媒体以及...

    liferay portal 6 使用文档

    Liferay Portal 6拥有强大的内容管理系统,允许用户轻松创建、编辑和发布各种类型的内容,包括文章、文档、多媒体等。其内置的富文本编辑器和版本控制功能确保了内容的质量和一致性。 ##### 2. 社交媒体集成 平台...

    liferay portal 开发指南

    ### Liferay Portal 开发指南知识点概述 #### 一、简介 **Liferay Portal** 是一款功能强大的企业级门户平台,支持多种应用集成和技术扩展。它不仅提供了丰富的特性满足企业日常需求,同时也支持高度定制化开发。...

    Liferay Portal内容和布局详解

    ### Liferay Portal的内容和布局详解 #### 一、布局(Layout) **布局**是Liferay Portal中用于管理Portlet的关键概念之一。布局不仅决定着Portlet的呈现方式,还影响着用户的交互体验。在Liferay中,布局是通过一...

    Liferay Portal文档

    Liferay Portal是一款开源的企业级门户平台,它提供了丰富的功能,如内容管理、社交网络、协作工具等,广泛应用于构建智慧社区和企业内部信息系统。 1. **Certus Portal架构** - **Portal规范**:Liferay Portal...

    Liferay Portal 二次开发指南

    Liferay的桌面概念是指用户登录后看到的第一个页面,可以个性化设置,包含用户常用的应用和服务。品质则涉及界面风格和用户体验,允许用户根据个人喜好调整颜色、字体和其他视觉元素。 ##### 2.5 部署描述文件 ...

    liferay-portal详解

    Liferay Portal 的内容和布局包括布局、内容和portlet 之间的关系。布局决定了 portal 的外观和布局。内容是 portal 的核心组成部分,包括文本、图片和视频等。portlet 是一个小型的 web 应用程序,提供了特定的功能...

    liferay+Portal+二次开发指南

    ##### 第三节 Liferay Portal 内容和布局 - **布局**: 页面的设计结构。 - **内容**: 页面上显示的信息或功能模块。 - **内容布局与 Portlet 的关系**: 内容通过portlet展示,布局则决定了portlet的位置和样式。 #...

    Liferay Portal performance

    本次研究由 Liferay 工程团队执行,旨在通过一系列用例(包括基础设施门户、协作和内容管理)进行密集调优和测试,以展示 Liferay Portal EE 的可扩展性。 该研究的目标是: - 确定单个物理服务器在定义的测试案例...

    搭建liferay portal的开发环境.doc

    搭建Liferay Portal的开发环境是一项细致且复杂的过程,涉及到多个步骤和组件的配合。本文将根据给定的文件信息,详细解析如何从零开始构建一个完整的Liferay开发环境,包括必要的准备、具体步骤以及关键配置。 ###...

    liferay Portal 求助

    Liferay Portal 是一个开源的企业级门户平台,它允许用户创建、管理和定制各种Web应用程序和内容。这个求助主题可能涉及到在使用Liferay Portal过程中遇到的问题,或者是寻求关于如何更有效地利用其特性和功能的建议...

    Liferay Portal 数据库介绍

    Liferay Portal 数据库介绍 Liferay Portal 数据库是指Liferay Portal系统中存储的所有数据,包括用户信息、组织...以上是Liferay Portal 数据库介绍的相关知识点,包括Layout 表的字段、页面布局的修改和查询语句等。

    基于Liferay+Portal技术的校园信息门户研究与实现

    Liferay是一款开源的Java企业门户框架,它提供了强大的门户服务和企业级功能,如用户管理、权限控制、内容管理等。Liferay支持WSRP(Web Services for Remote Portlets)标准,使得不同系统之间的portlet能够互相...

Global site tag (gtag.js) - Google Analytics