Как встроить портлет во всплывающее окно на странице в Liferay 7

Из JavaScript мне нужно создать всплывающее окно на странице (на основе DIV?), которое показывает определенный портлет.

Это выглядит именно так, как мне нужно:
https://web.liferay.com/community/wiki/-/wiki/Main/Using+Pop-up+in+Liferay

Liferay предоставляет класс Expanse.Popup для реализации этого типа всплывающих окон. Вот как будет выглядеть всплывающее окно такого типа:
введите описание изображения здесь
Этот код javascript сделает асинхронный вызов URL-адреса, который мы ему даем, и поместит содержимое в наша страница. Ниже приведен пример, который загрузит URL-адрес «url» во всплывающем окне под названием «наш заголовок»:

var popup = новый Expanse.Popup(
[...]

Проблема. К сожалению, когда я добавляю этот код в свой портлет, развертываю и запускаю его, я получаю:

TypeError: Expanse.Popup is not a function

Судя по комментариям на этой странице, функция много раз меняла названия. Я пробовал Alloy.Popup, A.Popup, Liferay.Popup, все одинаково терпят неудачу. Кроме того, я читал, что AUI устарел и не рекомендуется для новой разработки.

Liferay.Util.openWindow работает, но, к сожалению, в качестве параметра принимает URL, а не портлет. Есть ли способ заставить его показывать портлет? Я не хочу создавать страницу для этого на всех сайтах.

Вопрос. Как реализовать это всплывающее окно на странице, которое загружает портлет, в Liferay 7?
Оно может быть модальным или нет: я не возражаю, если пользователи могут позволить всплывающему открывать и взаимодействовать с остальной частью страницы.


person Nicolas Raoul    schedule 28.07.2017    source источник
comment
Попробуйте код здесь: stackoverflow.com/questions/35162383/. Вам нужно будет немного изменить его, поскольку он специфичен для JSF, но его легко изменить для JSP.   -  person stiemannkj1    schedule 29.07.2017


Ответы (1)


OpenWindow - хороший подход. Если вы посмотрите на параметры портлета и на то, как открывается диалоговое окно конфигурации, вы получите что-то вроде этого

Liferay.Portlet.openWindow({
bodyCssClass: 'dialog-with-footer',
destroyOnHide: true,
namespace: '_com_liferay_polls_web_portlet_PollsDisplayPortlet_INSTANCE_qOP6anrnoY5o_',
portlet: '#p_p_id_com_liferay_polls_web_portlet_PollsDisplayPortlet_INSTANCE_qOP6anrnoY5o_',
portletId: 'com_liferay_polls_web_portlet_PollsDisplayPortlet_INSTANCE_qOP6anrnoY5o',
title: 'ASDF',
uri: 'portlet render url'

});

URL-адрес необходим для точного определения портлета, который вы на самом деле хотели бы отображать, но вы можете легко сгенерировать его для себя с помощью тега liferay-portlet:renderURL (он принимает идентификатор портлета в качестве параметра) или вы можете создать его самостоятельно, если знаете синтаксис (не рекомендуется)

person Miroslav Ligas    schedule 09.08.2017