Foren

wie komme ich an die Url eines JournalArticle?

Matthias Fischer, geändert vor 14 Jahren.

wie komme ich an die Url eines JournalArticle?

New Member Beiträge: 6 Beitrittsdatum: 10.12.09 Neueste Beiträge
Hallo zusammen,

ich bin recht neu in der Liferay-welt und hab gleich mal eine Frage:

Wenn ich einen Bezeichner eines Artikels (JournalArticle) habe (den PrimaryKey oder noch besser die UUID), gibt es da eine automagische Möglichkeit diesen Bezeichner in alle URL's zu verwandeln, auf denen dieser Artikel angezeigt wird?

Andersherum sehe ich da nämlich z.Zt. nicht so ganz durch. Ich habe einen ModelListener, der getriggert wird, wenn ein neuer Artikel erstellt wird, diese Info gibt er an eine andere Webanwendung weiter. Nun möchte ich aber später mal aus der anderen Webanwendung, einen bestimmten Artikel aus Liferay im Browser aufrufen. Dafür bräuchte ich dann ja eine URL (oder mehrere wenn der Artikel in mehreren WebContentDisplay-Portlets angezeigt wird). Gibt es da eine Möglichkeit ranzukommen?

Wenn nicht automagisch, kann mir dann jemand vielleicht einen Hinweis geben in welcher Richtung ich da weitersuchen müsste?

Vielen Dank!
Matthias
thumbnail
Dominik Förderreuther, geändert vor 14 Jahren.

RE: wie komme ich an die Url eines JournalArticle?

Junior Member Beiträge: 41 Beitrittsdatum: 15.09.09 Neueste Beiträge
Hi,

schau Dir im Portal-Source mal

com.liferay.portlet.journalcontent.JournalContentFriendlyURLMapper

an. Da steht recht schön drin, was es für einen Link auf einen Artikel genau braucht. Kannst ja evtl auch gleich eine "freundliche" URL aufbauen.

Viele Grüße,
Dominik
Matthias Fischer, geändert vor 14 Jahren.

RE: wie komme ich an die Url eines JournalArticle?

New Member Beiträge: 6 Beitrittsdatum: 10.12.09 Neueste Beiträge
Hi,

herzlichen Dank!

Das war ein guter Hinweis, jetzt muss ich nur noch herausfinden wie ich eine portletURL bekomme, die scheint man ja zu benötigen.

Ich habe auch noch das hier gefunden danke Deinem Stichwort "JournalContentFriendlyURLMapper":
http://www.liferay.com/web/guest/community/forums/-/message_boards/message/1222331

Anscheinend kann man mit
http://localhost:8080/web/guest/home/-/journal_content/56/{$GroupID}/{$ArticleID}

auch jeden beliebigen Artikel der jeweiligen Community per ID ansprechen. Wurde der Artikel noch nicht approved taucht da nur ein WebContentDisplay-Portlet auf, das keinen Inhalt anzeigt. Zu beachten ist allerdings, dass nur der Artikel angezeigt wird. Theoretisch könnte der ja an verschiedenen Stellen im Portal in jeweils einem WebContentDisplay auftauchen. Diese Seiten, von denen der Artikel nur ein Teil ist, wird man auf die gerade beschriebene Weise nicht finden.

Darüberhinaus kann man per ModelListener versuchen sich eine Liste aller Seiten aufzubauen, auf denen der Artikel angezeigt wird. Ich skizziere das mal nur grob, da ich selbst noch nicht über das probier-Stadium hinaus bin:

Durch registrieren eines ModelListeners für (in portal-ext.properties des hooks):
value.object.listener.com.liferay.portal.model.Layout=your.LayoutListener
value.object.listener.com.liferay.portal.model.PortletPreferences=your.PortletPreferencesListener
value.object.listener.com.liferay.portlet.journal.model.JournalArticle=your.WebcontentListener

ist es ebenfalls möglich an URL-Informationen zu kommen.

  • Der WebcontentListener hört auf CRUD eines JournalArticle und liefert u.a. die ArticleID
  • Der PortletPreferencesListener hört auf CRUD eines Portlets auf einer Seite und liefert PortletID und (in getPreferences()) auch die Article ID. Fehlt noch die URL.
  • Die kann über den LayoutListener geholt werden, der ebenfalls weiss, wenn eine Seite erstellt wird (mit Portlet oder als Childpage) und
    kennt unter:
    layout.getLayoutType().getTypeSettingsProperties();
    die PortletID und die (friendly)Url.

Ich hab keine Ahnung ob das in der Praxis dann auch so gut funktioniert, aber ich denke wenn man diese Infos alle in einer Datenstruktur zusammenführen würde könnte man eine Liste mit allen Seiten erhalten, auf denen der Artikel auftaucht.

Wird eine Chilpage mit Webcontent erstellt, kann der Layoutlistener auch sowas liefern(aus meinem logfile):
### onAfterUpdateLayout ###
FriendlyURL: /about-x/and-y
TypeSettings: sitemap-changefreq=daily
sitemap-include=1
article-id=10601

Keine Ahnung ob das auch geht, wenn keine FriendlyUrl angegeben wurde.

Nachdem ich aber die Ansätze von oben gefunden habe, werde ich diesen Ansatz nur auf ausdrücklichen Wunsch weiterverfolgen ;) Das andere sieht viel weniger kompliziert aus! emoticon

Vielen Dank!
Matthias
thumbnail
Dominik Förderreuther, geändert vor 14 Jahren.

RE: wie komme ich an die Url eines JournalArticle?

Junior Member Beiträge: 41 Beitrittsdatum: 15.09.09 Neueste Beiträge
Hi,

wahrscheinlich hast Du die URL ja schon gefunden. Falls nicht:

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

Viele Grüße,
Dominik