删除Liferay布局中嵌入的portlet

时间:2015-07-14 06:27:06

标签: layout liferay portlet


我知道规范说另一个,但有没有办法删除嵌入在布局中的portlet?假设我在每个页面上都有我的搜索portlet布局,但我希望它在每个页面上除外。

我已经尝试过这个话题:How to delete a portlet in Liferay 6.1 programmatically from code,使用
<a onclick="Liferay.Portlet.close('#p_p_id_3_'); return false;">Remove</a>
它工作正常,但要删除的portlet不必要呈现并发送给客户端。

我也试过这段代码:

ThemeDisplay themeDisplay = (ThemeDisplay) req.getAttribute(com.liferay.portal.kernel.util.WebKeys.THEME_DISPLAY);
Layout layout = themeDisplay.getLayout();
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();
List<Portlet> portlets = layoutTypePortlet.getAllPortlets();
for (Portlet portlet : portlets) {
    if(portlet.getPortletId().equalsIgnoreCase(portletToDeleteId)){
        layoutTypePortlet.removePortletId(userId, portletToDeleteId);
        LayoutLocalServiceUtil.updateLayout(layout);
    }
}

但它无法列出布局中嵌入的portlet;它只迭代我从门户手动添加的portlet。

我以这种方式在布局中添加portlet:
$processor.processPortlet("3")

我在Liferay Portal 6.2 GA4中工作 TIA

1 个答案:

答案 0 :(得分:0)

是的,当然有一种方法:在该页面上使用不同的布局 - 最好是不嵌入搜索portlet的布局。

此外,页面特定的CSS(包含搜索portlet的display:none;)也会有所帮助。是的,portlet将被呈现并发送 - 但是我们会谈到什么样的性能影响?是否会使任何可衡量的差异?如果是:从上面选择选项1。如果不是:不要打扰。