Liferay设置static portlet

在上一篇文件 ”Liferay如何自定义字段设计不同用户的默认布局“的基础上,新增需求。


要求用户登入进来后,不允许删除和移动目前现有的布局,就像 “layout.static.portlets.start.”这种配置效果。

但是由于目前的"layout.static.portlets.start."这种肯定满足不了要求。


解决方案:

新建ext工程,新建  com.liferay.portal.model.impl.LayoutTypePortletImpl

重写方法 getStaticPortlets(String position)

protected List<Portlet> getStaticPortlets(String position)
		throws PortalException, SystemException {

		String[] portletIds = getStaticPortletIds(position);
		
		List<Portlet> portlets = new ArrayList<Portlet>();
		Layout layout = getLayout();
		//根据不同的角色制定不同的用户布局
		long userId = layout.getUserId();
		UserInfo userInfoTemp = null;
		if(mapCurrUser == null || !mapCurrUser.containsKey(userId)){
			mapCurrUser = new HashMap<Long, Object>();
			//根据不同的角色制定不同的用户布局
			userInfoTemp = UserInfoLocalServiceUtil.findByLiferayUserIdForUserInfo(userId);
			mapCurrUser.put(userId, userInfoTemp);
			System.out.println("current User : " + userId + " +++ " + mapCurrUser.get(userId));
		}else{
			userInfoTemp = (UserInfo)mapCurrUser.get(userId);
		}
		
		for (String portletId : portletIds) {
			//去掉验证
//			if (Validator.isNull(portletId) ||
//				hasNonstaticPortletId(portletId)) {
//
//				continue;
//			}
			Portlet portlet = PortletLocalServiceUtil.getPortletById(
				getCompanyId(), portletId);
			if (portlet != null) {
				Portlet staticPortlet = portlet;

				if (portlet.isInstanceable()) {

					// Instanceable portlets do not need to be cloned because
					// they are already cloned. See the method getPortletById in
					// the class PortletLocalServiceImpl and how it references
					// the method getClonedInstance in the class PortletImpl.

				}
				else {
					staticPortlet = (Portlet)staticPortlet.clone();
				}

				staticPortlet.setStatic(true);

//				if (position.startsWith("layout.static.portlets.start")) {
//					staticPortlet.setStaticStart(true);
//				}
				//modify by yuqian 20160305
				String portalExtFix = "";
				if(userInfoTemp.getUserType().equals("TH")){    //老师
					portalExtFix = "layout.teacher.role.static.portlets.start";
				}
				if(userInfoTemp.getUserType().equals("PA")){     //家长
					portalExtFix = "layout.parent.role.static.portlets.start";
				}
				if(userInfoTemp.getUserType().equals("ST")){    //学生
					portalExtFix = "layout.student.role.static.portlets.start";
				}
				if(userInfoTemp.getPosition() != null && !userInfoTemp.getPosition().equals("")){   //领导布局
					portalExtFix = "layout.leader.role.static.portlets.start";
				}
				if (position.startsWith(portalExtFix)) {
					staticPortlet.setStaticStart(true);
				}
				System.out.println("portalExtFix : " + portalExtFix);
				portlets.add(staticPortlet);
			}
		}

		return portlets;
	}


重写方法  getAllPortlets(String columnId)

public List<Portlet> getAllPortlets(String columnId)
		throws PortalException, SystemException {
		String columnValue = getColumnValue(columnId);
		String[] portletIds = StringUtil.split(columnValue);

		List<Portlet> portlets = new ArrayList<Portlet>(portletIds.length);

		for (String portletId : portletIds) {
			Portlet portlet = PortletLocalServiceUtil.getPortletById(
				getCompanyId(), portletId);
			if ((portlet != null) && !portlet.isUndeployedPortlet()) {
				portlets.add(portlet);
			}
		}
//		List<Portlet> startPortlets = getStaticPortlets(
//			PropsKeys.LAYOUT_STATIC_PORTLETS_START + columnId);
		
		
		Layout layout = getLayout();
		//根据不同的角色制定不同的用户布局
		long userId = layout.getUserId();
		String keyPrefixTemp = "";
		UserInfo userInfoTemp = null;
		if(mapCurrUser == null || !mapCurrUser.containsKey(userId)){
			mapCurrUser = new HashMap<Long, Object>();
			//根据不同的角色制定不同的用户布局
			userInfoTemp = UserInfoLocalServiceUtil.findByLiferayUserIdForUserInfo(userId);
			mapCurrUser.put(userId, userInfoTemp);
		}else{
			userInfoTemp = (UserInfo)mapCurrUser.get(userId);
		}
		
		if(userInfoTemp != null){
			if(userInfoTemp.getPosition() != null && !userInfoTemp.getPosition().equals("0")){   //领导布局
				System.out.println("curr is leader...");
				keyPrefixTemp = "layout.leader.role.static.portlets.start.";
			}
			
			if(userInfoTemp.getUserType().equals(TeachContants.TEACHER_USER_POSITION)){    //老师
				System.out.println("curr is teacher...");
				keyPrefixTemp = "layout.teacher.role.static.portlets.start.";
			}
			
			if(userInfoTemp.getUserType().equals(TeachContants.PARENT_USER_POSITION)){     //家长
				System.out.println("curr is parent...");
				keyPrefixTemp = "layout.parent.role.static.portlets.start.";
			}
			
			if(userInfoTemp.getUserType().equals(TeachContants.STUDENT_USER_POSITION)){    //学生
				System.out.println("curr is student...");
				keyPrefixTemp = "layout.student.role.static.portlets.start.";
			}
		}else{
			System.out.println("curr User is null");
			keyPrefixTemp = PropsKeys.LAYOUT_STATIC_PORTLETS_START;
		}
		List<Portlet> startPortlets = getStaticPortlets(
				keyPrefixTemp + columnId);
		
//		for(Portlet pTemp :startPortlets){
//			System.out.println("pTemp=============" + pTemp.getPortletId());
//		}

		List<Portlet> endPortlets = getStaticPortlets(
			PropsKeys.LAYOUT_STATIC_PORTLETS_END + columnId);
		System.out.println("2________________curr Time :"+System.currentTimeMillis());
		return addStaticPortlets(portlets, startPortlets, endPortlets);
	}


修改portal-ext.properties配置

layout.leader.role.static.portlets.start.column-1[user]=xxx,xxx
layout.leader.role.static.portlets.start.column-2[user]=xxx,xxx
layout.leader.role.static.portlets.start.column-3[user]=xxx,xxx
layout.leader.role.static.portlets.start.column-4[user]=xxx,xxx

layout.student.role.static.portlets.start.column-1[user]=xxx,xxx
layout.student.role.static.portlets.start.column-2[user]=xxx,xxx

layout.parent.role.static.portlets.start.column-1[user]=xxx,xxx
layout.parent.role.static.portlets.start.column-2[user]=xxx,xxx


layout.teacher.role.static.portlets.start.column-1[user]=xxx,xxx
layout.teacher.role.static.portlets.start.column-2[user]=xxx,xxx
layout.teacher.role.static.portlets.start.column-3[user]=xxx,xxx
layout.teacher.role.static.portlets.start.column-4[user]=xxx,xxx


你可能感兴趣的:(Liferay设置static portlet)