2016-12-08 1 views
0

À l'intérieur de Liferay 6.2 hook Je souhaite connaître le type de portlet (Asset Publisher/Web Content Display). Le nom du portlet ne m'aide pas car l'utilisateur a peut-être utilisé un titre personnalisé et dans ce cas, "Asset Publisher"/"Web Content Display" ne sera pas accessible pour moi.Obtenir le type de portlet dans Liferay 6.2 Crochet

emplacement du fichier crochet exact où je veux est de type portlets: /html/portlet/portlet_css/view.jsp

Répondre

0

bien sans accrocher d'autres parties de Liferay vous ne pouvez pas l'obtenir là-bas (en code java). Le portlet "Portlet CSS" est rempli via javascript, donc il n'y avait apparemment pas besoin d'envoyer un portletid en paramètre.

Pour obtenir portletId vous devez également brancher /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' 

modifier être quelque chose comme ça

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' 

virgule et _113_portletId: exemple ._portletId ont été ajoutés.

Après cela, vous pouvez mettre en /html/portlet/portlet_css/view.jsp accroché

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

portletId pour l'éditeur actif sera quelque chose comme 101_INSTANCE_reKokSN3aDaL

portletId pour l'affichage du contenu Web sera quelque chose comme 56_INSTANCE_dxNxXuQ7ZuvB

afin que vous puissiez tester wether portletId début s avec 101, 56, ...

Vous pouvez également obtenir l'objet de portlets avec

PortletLocalServiceUtil.getPortletById(portletId); 

UPDATE (réponse à la question dans le commentaire):

Ce portlet n'a pas été conçu pour une telle utilisation, une fois il charge il reste rendu en html et toutes les modifications sont faites avec javascript. Lorsque "Look and feel" est ouvert pour la première fois après le chargement de la page, la requête XHR au serveur est effectuée et "/html/portlet/portlet_css/view.jsp" est affiché. La deuxième fois (pour un autre portlet sur la même page), javascript prépare modal pour un autre (ou même) porlet, "/html/portlet/portlet_css/view.jsp" ne sera pas rendu à nouveau.

Pour forcer la redirection de "/html/portlet/portlet_css/view.jsp", modifiez à nouveau "/html/js/liferay/look_and_feel.js".

après (dans ma source est la ligne 136)

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

ajouter cette

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

Il devrait être avant

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

Effacer Liferay et le cache navigateur.

+0

merci. mais pourquoi je reçois les mêmes identifiants de portlet pour tous les portlets. quand je rafraîchis la page alors seulement je reçois le nouvel identifiant –

0

Vous pouvez obtenir l'objet PortletDisplay de l'objet de contexte ThemeDisplay et de PortletDisplay, vous pouvez obtenir le titre, PortletName etc.

Notez que themeDisplay est déjà disponible et utilisé dans votre jsp /html/portlet/portlet_css/view.jsp PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String title=portletDisplay.getTitle(); String portletName=portletDisplay.getPortletName();