Я знаю, что спецификация говорит другой, но есть ли способ удалить портлет, встроенный в макет? Скажем, у меня есть макет с портлетом поиска на каждой странице, но я бы хотел, чтобы он был на каждой странице, кроме одного.
Я уже попробовал эту тему: 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>
И это сработало, но портлет для удаления была ненужной оказанной и отправляется клиенту.
Я также попробовал этот код:
Удаление портлета, встроенного в Liferay Layouts
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);
}
}
Но это не список портлетов, встроенных в макете; он выполняет только итерации через портлеты, которые я добавляю вручную с портала.
Я добавляю портлет в макет таким образом: $processor.processPortlet("3")
Я работаю в Liferay Portal 6.2 GA4.
TIA