代码之家  ›  专栏  ›  技术社区  ›  Dhruv Pandey

在Liferay 6.2挂钩中获取portlet类型

  •  0
  • Dhruv Pandey  · 技术社区  · 8 年前

    了解portlet类型 (资产发布者/Web内容显示)。Portlet名称对我没有帮助,因为用户可能使用了自定义标题,在这种情况下,“资产发布者”/“Web内容显示”将无法访问。

    我想要Portlet类型的确切挂钩文件位置是: /html/portlet/portlet_css/view.jsp

    2 回复  |  直到 8 年前
        1
  •  0
  •   Martin Gamulin    8 年前

    要获得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:实例。_Portlet ID 添加。

    之后,您可以输入hooked/html/portlet/portlet_css/view.jsp

    String portletId = (String) renderRequest.getParameter("portletId");
    

    资产发布者的portletId将类似于 101_INSTANCE_reKokSN3aDaL

    用于Web内容显示的portletId将类似于

    所以你可以测试portletId是否以101、56、。。。

    您还可以使用

    PortletLocalServiceUtil.getPortletById(portletId);
    

    更新(评论中问题的答案):

    在向服务器发出页面加载XHR请求并呈现“/html/portlet/portlet_css/view.jsp”之后,第一次打开“Look-and-feel”。 第二次(对于同一页面上的另一个portlet),javascript为另一个(或同一个)portlet准备模式,“/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和浏览器缓存。

        2
  •  0
  •   Pankaj Kathiriya    8 年前

    您可以从主题显示上下文对象中获取PortletDisplay对象,并从Portlet显示中获取标题、PortletName等。

    注意,主题显示已经可用,并在jsp/html/portlet/portlet_css/view.jsp中使用 PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String title=portletDisplay.getTitle(); String portletName=portletDisplay.getPortletName();