Inside Liferay 6.2 hook 我想知道portlet类型(资产发布者/网页内容显示)。 Portlet名称不会帮助我,因为用户可能使用了自定义标题,在这种情况下,“Asset Publisher”/“Web Content Display”将无法访问。
我希望Portlet类型的精确挂钩文件位置是: /html/portlet/portlet_css/view.jsp
答案 0 :(得分:0)
您可以从ThemeDisplay上下文对象和PortletDisplay获取PortletDisplay对象,您可以获得Title,PortletName等。
请注意,themeDisplay已经可用并在jsp /html/portlet/portlet_css/view.jsp中使用
PortletDisplay portletDisplay = themeDisplay.getPortletDisplay();
String title=portletDisplay.getTitle();
String portletName=portletDisplay.getPortletName();
答案 1 :(得分:0)
没有挂钩Liferay的其他部分你就无法得到它(在java代码中)。 Portlet“Portlet CSS”通过javascript填充,因此显然不需要发送portletid作为参数。
要获取portletId,您还应该挂钩/html/js/liferay/look_and_feel.js
autoLoad: false,
showLoading: false,
data: {
p_l_id: themeDisplay.getPlid(),
p_p_id: 113,
p_p_state: EXCLUSIVE,
doAsUserId: themeDisplay.getDoAsUserIdEncoded()
},
uri: themeDisplay.getPathMain() + '/portal/render_portlet'
将其修改为类似
autoLoad: false,
showLoading: false,
data: {
p_l_id: themeDisplay.getPlid(),
p_p_id: 113,
p_p_state: EXCLUSIVE,
doAsUserId: themeDisplay.getDoAsUserIdEncoded(),
_113_portletId: instance._portletId
},
uri: themeDisplay.getPathMain() + '/portal/render_portlet'
逗号和 _113_portletId:instance._portletId 已添加。
之后你可以把它挂钩/html/portlet/portlet_css/view.jsp
String portletId = (String) renderRequest.getParameter("portletId");
资产发布者的portletId类似 101_INSTANCE_reKokSN3aDaL
用于Web内容显示的portletId将是类似的 的 56_INSTANCE_dxNxXuQ7ZuvB 强>
所以你可以测试更好的portletId以101,56开始......
您还可以使用
获取Portlet对象PortletLocalServiceUtil.getPortletById(portletId);
更新(回答评论中的问题):
此portlet不是用于此类用途,一旦加载它就会以html格式保存,并且所有修改都是使用javascript进行的。
在页面加载XHR请求到服务器并且呈现“/html/portlet/portlet_css/view.jsp”之后第一次打开“外观”时。 第二次(对于同一页面上的另一个portlet),javascript为另一个(或相同的)porlet准备模态,“/ html / portlet / portlet_css / view.jsp”将不再呈现。
强制重新渲染“/html/portlet/portlet_css/view.jsp”再次修改“/html/js/liferay/look_and_feel.js”。
之后(在我的来源中是第136行)
if (!content) {
content = A.Node.create('<div class="loading-animation" />');
}
添加此
if (instance._currentPopup) {
A.one("#" + instance._currentPopup.get("id")).remove()
instance._currentPopup = null;
}
应该在
之前if (!instance._currentPopup) {
instance._currentPopup = Liferay.Util.Window.getWindow(
...
清除Liferay和浏览器缓存。