分享
 
 
 

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

王朝other·作者佚名  2007-06-07
窄屏简体版  字體: |||超大  

Liferay额外研究(一):http://blog.csdn.net/james999/archive/2006/07/26/979938.aspx

Liferay额外研究(二):http://blog.csdn.net/james999/archive/2006/07/27/986386.aspx

Liferay额外研究(三):http://blog.csdn.net/james999/archive/2006/08/08/1037326.aspx

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(),

groupDefaultLayout.getColorSchemeId());

// layoutMapping.put(groupDefaultLayout.getPrimaryKey(),

// layout.getPrimaryKey());

return layout;

}

protected void copyPreferences(HttpServletRequest httpReq, Layout layout,

Layout copyLayout) throws Exception ...{

String companyId = layout.getCompanyId();

LayoutTypePortlet copyLayoutTypePortlet = (LayoutTypePortlet) copyLayout

.getLayoutType();

List copyPortletIds = copyLayoutTypePortlet.getPortletIds();

for (int i = 0; i < copyPortletIds.size(); i++) ...{

String copyPortletId = (String) copyPortletIds.get(i);

// Copy preference

PortletPreferencesPK prefsPK = PortletPreferencesFactory

.getPortletPreferencesPK(httpReq, copyPortletId, layout

.getPlid());

PortletPreferencesLocalServiceUtil.getPreferences(companyId,

prefsPK);

PortletPreferencesPK copyPrefsPK = PortletPreferencesFactory

.getPortletPreferencesPK(httpReq, copyPortletId, copyLayout

.getPlid());

PortletPreferencesImpl copyPrefsImpl = (PortletPreferencesImpl) PortletPreferencesLocalServiceUtil

.getPreferences(companyId, copyPrefsPK);

PortletPreferencesLocalServiceUtil.updatePreferences(prefsPK,

copyPrefsImpl);

// Copy portlet setup

prefsPK = new PortletPreferencesPK(copyPortletId, layout

.getLayoutId(), layout.getOwnerId());

PortletPreferencesLocalServiceUtil.getPreferences(companyId,

prefsPK);

copyPrefsPK = new PortletPreferencesPK(copyPortletId, copyLayout

.getLayoutId(), copyLayout.getOwnerId());

copyPrefsImpl = (PortletPreferencesImpl) PortletPreferencesLocalServiceUtil

.getPreferences(companyId, copyPrefsPK);

PortletPreferencesLocalServiceUtil.updatePreferences(prefsPK,

copyPrefsImpl);

}

}

private String getOwnerId(String groupId, boolean privateLayout) ...{

if (privateLayout) ...{

return Layout.PRIVATE + groupId;

} else ...{

return Layout.PUBLIC + groupId;

}

}

}

修改com.liferay.portal.events.ServicePreAction类

是在 ext工程的 ext-ejb/src下修改,新建com.liferay.portal.events包,并把原始的ServicePreAction类拷贝至此,然后修改,修改后通过ext-ejb下的build.xml编译部署。

在ServicePreAction类中新增一个addDefaultLayouts方法:

protected void addDefaultLayouts(HttpServletRequest httpReq, User user)

throws PortalException, SystemException {

if (user.hasPrivateLayouts()) {

return;

}

(new LayoutCopy(user)).copyDefaultUserLayout(httpReq);

}

然后,修改run方法中对原始addDefaultLayouts方法的调用方法:

if (layoutsRequired) {

String user_layout_group = PropsUtil.get("default.user.layout.group");

if(user_layout_group==null || user_layout_group.length()==0){

addDefaultLayouts(user);

}else{

addDefaultLayouts(req, user);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有