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;
}