2016-12-08 2 views
0

Inside Liferay 6.2 Haken Ich möchte Portlet-Typ (Asset Publisher/Web Content Display) wissen. Der Portlet-Name wird mir nicht weiterhelfen, da der Benutzer möglicherweise einen benutzerdefinierten Titel verwendet hat. In diesem Fall ist "Asset Publisher"/"Web Content Display" für mich nicht zugänglich.Get Portlet-Typ in Liferay 6.2 Hook

Exact Haken Speicherort, an dem i Portlet-Typen will, ist: /html/portlet/portlet_css/view.jsp

Antwort

0

Nun, ohne andere Teile Liferay Einhaken Sie können es nicht dorthin gelangen (in Java-Code). Das Portlet "Portlet CSS" wird über Javascript gefüllt, so dass Portlets als Parameter nicht gesendet werden mussten.

Um portletId Sie sollten auch

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' 

ändern es so etwas wie dieses

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' 

Komma sein und _113_portletId /html/js/liferay/look_and_feel.js

Haken: instance ._portletId wurden hinzugefügt.

Danach können Sie in Haken /html/portlet/portlet_css/view.jsp setzen

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

portletId für Asset Publisher wird so etwas wie 101_INSTANCE_reKokSN3aDaL

portletId für Web Content Anzeige sein wird so etwas wie 56_INSTANCE_dxNxXuQ7ZuvB

so können Sie testen, ob portletId Start s mit 101, 56, ...

Sie auch Portlet-Objekt mit

PortletLocalServiceUtil.getPortletById(portletId); 

UPDATE (Antwort auf die Frage in Kommentaren) erhalten können:

Dieses Portlet wurde nicht für eine solche Verwendung bestimmt ist, einmal es lädt es bleibt in html gerendert und alle Änderungen werden mit Javascript gemacht.

Wenn "Look and Feel" zum ersten Mal nach dem Laden der Seite geöffnet wird, wird eine XHR-Anfrage an den Server gestellt und "/html/portlet/portlet_css/view.jsp" wird gerendert. Zum zweiten Mal (für ein anderes Portlet auf derselben Seite) bereitet JavaScript das Modal für ein anderes (oder dasselbe) Problem vor, "/html/portlet/portlet_css/view.jsp" wird nicht erneut gerendert.

Um das erneute Rendern von "/html/portlet/portlet_css/view.jsp" zu erzwingen, ändern Sie erneut "/html/js/liferay/look_and_feel.js".

nach (in meiner Quelle es Leitung 136 ist)

if (!content) { 
    content = A.Node.create('<div class="loading-animation" />'); 
} 

fügen Sie diese

if (instance._currentPopup) { 
    A.one("#" + instance._currentPopup.get("id")).remove() 
    instance._currentPopup = null; 
} 

Es sollte

if (!instance._currentPopup) { 
    instance._currentPopup = Liferay.Util.Window.getWindow(
    ... 

löschen Liferay und Browser-Cache, bevor sein.

+0

danke. aber warum bekomme ich die gleichen Portlet-IDs für alle Portlets. Wenn ich die Seite aktualisiere, bekomme ich nur die neue ID –

0

Sie PortletDisplay Objekt aus ThemeDisplay Kontextobjekt bekommen können und von PortletDisplay, Sie Titel bekommen, PortletName usw.

Beachten Sie, dass themeDisplay bereits verfügbar ist und verwendet in Ihrer jsp /html/portlet/portlet_css/view.jsp PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String title=portletDisplay.getTitle(); String portletName=portletDisplay.getPortletName();