我正在使用Liferay 6.1
我想从我的代码中删除Liferay 6.1中的portlet。
到目前为止我所做的是:
/* script pseudo code */
if object1.date() - today() < SOME_CONSTANT
return true;
else
if object2.field1 == 123 && oject1.date() > object2.field2
return true;
else
return false;
/* Main block of code */
$obj1 = New path\to\Object1();
$obj2 = New Path\To\Object2();
$result = eval($script);
if $result
doSomething();
以上代码工作正常。但它只在当前页面上工作,即它只能删除当前页面上的portlet。
但是我想删除门户网站上的portlet,它可能是我的门户网站菜单上的布局ID。
请建议出路。 提前谢谢。
此致
Varun Jain
答案 0 :(得分:2)
public void removePortlets(ActionRequest request, ActionResponse response)
throws PortletException {
ThemeDisplay themeDisplay = (ThemeDisplay) request
.getAttribute(WebKeys.THEME_DISPLAY);
long groupId = themeDisplay.getScopeGroupId();
String friendlyURL = "/demochildpage";
boolean privateLayout = false;
long userId = themeDisplay.getUserId();
try {
Layout layout = LayoutLocalServiceUtil.getFriendlyURLLayout(
groupId, privateLayout, friendlyURL);
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout
.getLayoutType();
layoutTypePortlet.removePortletId(userId, "28");
LayoutLocalServiceUtil.updateLayout(layout.getGroupId(),
layout.getPrivateLayout(), layout.getLayoutId(),
layout.getTypeSettings());
} catch (Exception e) {
e.printStackTrace();
}
}
答案 1 :(得分:1)
要走的路是: 在数据库中查询portlet所在的所有布局,而不是迭代和删除。 如果我不监督某些事情,您需要实现自定义查询或动态查询。也许已经有一个服务功能来获得所需的布局ID,但我对此表示怀疑。
答案 2 :(得分:0)
从未尝试过,但我想,您可以使用Liferay的服务实现您想要的效果。
这个过程似乎很简单如下:
1。使用com.liferay.portal.service.LayoutLocalServiceUtil.getLayouts(long groupId, boolean privateLayout)
获取所有页面/布局的列表
2. :迭代布局列表并从布局对象中提取portletIds列表com.liferay.portal.model.LayoutTypePortlet
3. :迭代portletIds并将每个porteltId与您的portletId字符串进行比较。
4. 如果匹配致电com.liferay.portal.model.layoutTypePortlet.removePortletId(long userId, String portletId)
并使用LayoutLocalServiceUtil.updateLayout(Layout layout)
更新布局
因此,示例代码如下所示:
String portletId = "#p_p_id_28_";
long userId = user.getUserId();
ArrayList<Layout> layouts = LayoutLocalServiceUtil.getLayouts(10180, true);
for(Layout layout : layouts){
if(!layout.isHidden()){
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();
ArrayList<String> layoutPortletIds = layoutTypePortlet.getPortletIds();
for(String layoutPortletId : layoutPortletIds){
if(layoutPortletId.equalsIgnoreCase(portletId)){
layoutTypePortlet.removePortletId(userId, portletId);
LayoutLocalServiceUtil.updateLayout(layout);
}
}
}
}