Liferay Portal額外研究(四):修改使用者登入後的預設布局和內容

來源:互聯網
上載者:User
  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;
   }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.