1

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

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

ありがとう

4

2 に答える 2

1

データベースのPortletPreferencesテーブルには、システム内の各ポートレットの構成が含まれています。Webコンテンツ表示ポートレットのarticleIdの構成は、プリファレンスとしてこのテーブルに保管されます。その表を見ると、3つの重要な列があります。

  • plidには、ポートレットがドロップされたレイアウト(=ページ)のIDが含まれています。
  • ポートレットIDには、ポートレットのインスタンス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>';
于 2011-12-08T15:14:12.140 に答える
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);
  ...
}
于 2014-12-11T11:02:45.207 に答える