2015-07-14 3 views
0


Я знаю, что спецификация говорит другой, но есть ли способ удалить портлет, встроенный в макет? Скажем, у меня есть макет с портлетом поиска на каждой странице, но я бы хотел, чтобы он был на каждой странице, кроме одного.

Я уже попробовал эту тему: 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

ответ

0

Да, конечно, есть способ: используйте другую компоновку на этой странице - предпочтительно такую, которая не включает портлет поиска.

Также будет определен конкретный CSS (содержащий display:none; для портлета поиска). Да, портлет будет отображаться и отправляться - но о каком влиянии на производительность мы говорим? Делает ли это любой измеримая разница? Если это так: выберите вариант 1 сверху. Если это не так: не беспокойтесь.

Смежные вопросы