2011-12-06 6 views
1

Liferay(6.0.6)Asset Publisherは、ポータルホームページの複数のコミュニティにすべての変更を公開しようとしています。リンクをクリックすると、ユーザーは別のコミュニティにリダイレクトされ、新しいWebコンテンツが表示されます。問題は、アセットパブリッシャーのデフォルトの動作(すべてのコミュニティから情報を収集するためのフックを使用していても)が、現在のページ(コンテンツがない)のグループを検索してURLを取得しようとすることです。 私は、ページを表示するjspを変更して、すべてのコミュニティのすべてのページを検索し、最初に目的のWebコンテンツを含むポートレットを検索しました。したがってLiferayでWebコンテンツを含むポートレット/ページを取得する

  1. WebコンテンツのジャーナルIDによってWebコンテンツを含むポートレットを取得するにはどうすればよいですか。
  2. ポートレットを含むページを取得するにはどうすればよいですか?データベース内

おかげ

答えて

1

PortletPreferences表には、システム内の各ポートレットの構成が含まれています。 Webコンテンツ表示ポートレットのarticleIdの構成は、この表にプリファレンスとして保管されます。

  • PLIDは、ポートレットがドロップされたレイアウト(=ページ)のIDが含まれています。あなたはそのテーブルを見ると、3つの重要な列があります。
  • portletidには、インスタンスポートレットのIDが含まれています。 Webコンテンツ表示ポートレットの場合、このIDのフォーマットは56_INSTANCE_XXXXで、XXXXはユニークなハッシュです。
  • は、このポートレットのすべての設定とその値のXML形式の文字列です。

好み XMLの例:

<portlet-preferences> 
    <preference><name>group-id</name><value>10139</value></preference> 
    <preference><name>article-id</name><value>14295</value></preference> 
</portlet-preferences> 

だから、それはあなたのSQLクエリは、右取得の問題だけです。私が知る限り、これを直接呼び出すことはできません。

SELECT l.friendlyURL 
FROM PortletPreferences p, Layout l 
WHERE p.plid=l.plid 
AND p.portletid LIKE '56_INSTANCE_%' 
AND p.preferences LIKE '<preference><name>article-id</name><value>14295</value></preference>'; 
0

次のように、記事がレンダリングされるレイアウトを見つけることができます。

List<Long> layoutIds = JournalContentSearchLocalServiceUtil.getLayoutIds(groupId, false, articleId); 
long layoutId = 0; 

if (!layoutIds.isEmpty()) { 
    layoutId = layoutIds.get(0).longValue(); 
    Layout layout = LayoutLocalServiceUtil.getLayout(groupId, false, layoutId); 
    String url = PortalUtil.getLayoutURL(layout, themeDisplay); 
    ... 
} 
関連する問題