5 Stimmen

Liferay benachrichtigt den Benutzer, wenn das Portlet nicht vorhanden ist

Angenommen, Portlet X ist in Liferay bereitgestellt und verfügt über eine freundliche URL-Zuordnung. Angenommen, ein Benutzer betritt das Liferay-Portal über die zugeordnete URL, aber das Portlet ist nicht im Portal vorhanden - es ist bereitgestellt, aber nicht zur Seite hinzugefügt.

Mein Problem ist, dass wenn der Benutzer die zugeordnete URL verwendet, nichts passiert - das Portal gibt kein visuelles Feedback, dass das Ziel-Portlet nicht vorhanden ist.

Wie kann ich das ändern? Ich benötige eine Art Warnung / Mitteilung an den Benutzer...

-- Bearbeiten --

Ich muss kein zweites Portlet verwenden, um die Anwesenheit eines anderen Portlets zu überprüfen.

Mit freundlichen Grüßen,

4voto

adarshr Punkte 59219

Soweit ich weiß, gibt es keine natürliche Möglichkeit, das zu erreichen. Ein Portlet muss nicht immer auf einer Seite installiert sein. Daher ist das Verhalten ganz normal.

Eine ziemlich hacky Lösung, die ich mir vorstellen könnte:

  1. Holen Sie sich das ThemeDisplay-Objekt in einem JSP mithilfe von , das das implizite Objekt themeDisplay im JSP-Bereich freigibt.

  2. Holen Sie sich den Typ-Einstellungsstring mit:

    String typeSettings = themeDisplay.getLayout().getTypeSettings();
  3. Die Typ-Einstellungen haben Werte wie unten:

    layout-template-id=foobar_2column
    sitemap-include=1
    column-1=foo_WAR_barportlet,abc_WAR_barportlet,56_INSTANCE_K4Vv,
    column-2=baz_WAR_xyzportlet,
    sitemap-changefreq=daily
  4. Wenn Sie also ein nicht-instanzierbares Portlet mit der ID foo innerhalb der WAR-Datei bar haben, ist die eindeutige ID des Portlets auf dem Layout foo_WAR_barportlet.

  5. Sobald Sie die Portlet-ID kennen, die Sie erwarten, ist es nur eine Frage der Überprüfung auf das Vorhandensein des Strings.

    <% if(!typeSettings.contains("foo_WAR_barportlet")) { %>
        Achtung! Portlet foo_WAR_barportlet nicht installiert.
    <% } %>

Sie können die oben genannten Schritte auch innerhalb eines Themes durchführen, müssen dies jedoch dann in Velocity anstelle von Java tun. Ich hoffe, das hilft.

EDIT

Sie können diese Zeile in Ihre portal_normal.vm einfügen

#if(!$layout.getTypeSettings().contains("foo_WAR_barportlet"))
    Achtung! Portlet foo_WAR_barportlet nicht installiert.
#end

1voto

Rajesh Pantula Punkte 9961

Ja, das können Sie erreichen, indem Sie die Inter-Portlet-Kommunikation verwenden, um den Benutzer darüber zu informieren, ob das Portlet zur Seite hinzugefügt wurde oder nicht. Sie müssen ein weiteres Portlet erstellen (nennen wir es ListenerPortlet), das standardmäßig auf der Seite sitzt.

Sie können das Listener-Portlet dem Theme hinzufügen, damit es standardmäßig zu jeder Seite hinzugefügt wird.

Wenn Sie nun Ihr Portlet zu Ihrer Seite hinzufügen, sollte Ihr Portlet ein clientseitiges JavaScript-Ereignis auslösen und Ihr Listener-Portlet benachrichtigen, dass Ihr Portlet zu Ihrer Seite hinzugefügt wurde.

Aus Ihrem Portletaufruf,

Liferay.trigger(eventName, data)

und binden Sie Ihr Listener-Portlet an das Ereignis

 Liferay.bind(eventName, function, [scope]) // den Scope als Seite festlegen

So wird Ihr Listener-Portlet wissen, ob Ihr Portlet zur Seite hinzugefügt wurde oder nicht. und Sie können eine Nachricht an den Benutzer anzeigen, wenn das Portlet nicht hinzugefügt wurde.

Zur weiteren Referenz überprüfen Sie das IPC

und speziell clientseitige Inter-Portlet-Kommunikation

0voto

Sharana Punkte 739

Es wäre besser, wenn wir das versuchen würden,

ThemeDisplay themeDisplay = request.getAttribute(WebKeys.THEME_DISPLAY);

Layout layout = LayoutLocalServiceUtil.getLayout(themeDisplay.getLayout().getPlid());
LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet)layout.getLayoutType();

List allPortletIds = layoutTypePortlet.getPortletIds();

Wenn die Liste leer ist, enthält die Seite keine Portlets.

Das Abrufen des LayoutTypePortlet stellt sicher, dass die Seite, auf die der Benutzer umgeleitet wurde, ein Layout-Typ-Portlet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X