web-dev-qa-db-ja.com

プログラムでliferayのページのURLを取得します

ポートレットにリンクを作成して、liferayポータルの別のページに移動できるようにします。私は、ページ名を指定すると、そのURL(friendlyURLでもかまいません)を返すAPI(liferay固有の場合があります)を探していることを実行します。

18
bernardn

LiferayのページにアクセスするためのAPIはLayoutServiceです。ただし、ページ名はLiferayで一意ではなく、さらに国際化されています。そのため、名前に加えて、ページのURLを取得するための一意のプロパティが必要です。

本当にページ名しかない場合は、LayoutLocalServiceUtil.getLayouts(...)を使用してすべてのレイアウトをループし、いくつかのプロパティ(この場合はその名前)を確認できます。

8
p.mesotten

Liferayのポータルページは、APIおよびDBテーブルでは実際にLayoutsと呼ばれています。これらはplidフィールドで識別され、LayoutLocalServiceUtilおよび関連するAPIを使用して取得できます。また、themeDisplay.getLayout()などの他の呼び出しからも取得できます。

ただし、ページへのURLを含む文字列を作成するには、ポータル、グループ、およびレイアウト自体のわかりやすいURLを連結する必要があります(つまり、_/web/guest/home_ --webはパブリックページのポータルURL、guestはデフォルトでゲストグループのフレンドリURLであり、homeはデフォルトでホームページ/レイアウトのフレンドリURLです)。これは公開ページか非公開ページかなどを確認する必要があるため、注意が必要な場合があります。

そして、グループにわかりやすいURLを持つ仮想ホストを使い始めると、状況は変わります。したがって、これは良い方法ではありません。

手動でURLを作成することを避け、正しいことが保証されているURLを使用するには、com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)静的メソッドPortalUtilを使用する必要があります。これで必要なすべての作業が実行されます。ただし、レイアウトだけでなく、ThemeDisplayも提供する必要があります。

12
mvmn

少なくともLiferay6.1.20では、「ポートレットURLをページにリンク」を使用して、ポータル内の別のページにリンクを進めることができます。ポートレットの「ルックアンドフィール」メニュー項目の下にあります。私にとってこれはうまくいきます。

乾杯

1