删除嵌入在 Liferay 布局中的 portlet

Removing portlet embedded in Liferay Layouts


我知道规范说的是另一个,但是有什么方法可以删除嵌入在布局中的 portlet 吗?假设我在每个页面上都有带有搜索 portlet 的布局,但我希望它在除一个页面之外的每个页面上。

我已经尝试过这个主题:,使用
<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

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

特定页面 CSS(包含用于搜索 portlet 的 display:none;)也将有些工作。是的,Portlet 将被呈现和发送——但是我们在谈论什么样的性能影响?它会产生 任何 可衡量的差异吗?如果是:从上面选择选项 1。如果没有:请不要打扰。