アセットレンダラーの作成
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。
このチュートリアルでは、 Asset Renderer
を作成し、JSPテンプレートをそれに関連付ける方法、および他のいくつかのオプションを構成する方法を学びます。
アセットレンダラーの作成方法を学習するには、既存の BlogsEntryAssetRenderer
クラスを作成します。これは、ブログアプリケーションのアセットレンダラーフレームワークを構成します。
-
資産関連クラスの既存のプロジェクトに新しいパッケージを作成します。 たとえば、
BlogsEntryAssetRenderer
クラスは、com.liferay.blogs.web
モジュールのcom.liferay.blogs.web.asset
パッケージにあります。 -
新しい
-.asset
パッケージでアプリケーションの-AssetEntry
クラスを作成し、AssetEntry
インターフェースを実装します。 例としてBlogsEntryAssetRenderer
クラスを考えてみましょう。public class BlogsEntryAssetRenderer extends BaseJSPAssetRenderer<BlogsEntry> implements TrashRenderer {
BlogsEntryAssetRenderer
クラスは、BaseJSPAssetRenderer
拡張します。これは、JSPテンプレートを使用してアセットのHTMLを生成する予定の人向けの拡張クラスです。BaseJSPAssetRenderer
クラスは、AssetRenderer
インターフェイスを実装します。 アセットレンダラーがTrashRenderer
インターフェイスも実装していることに気付くでしょう。 これは多くのアプリケーションで一般的な方法であるため、Liferay DXPのごみ箱を使用できます。 -
アセットレンダラークラスのコンストラクターを定義します。これは通常、アセットレンダラークラスで使用するアセットオブジェクトを設定します。
public BlogsEntryAssetRenderer( BlogsEntry entry, ResourceBundleLoader resourceBundleLoader) { _entry = entry; _resourceBundleLoader = resourceBundleLoader; }
BlogsEntryAssetRenderer
は、モジュールの言語キーをロードするリソースバンドルローダーも設定します。 言語キーのオーバーライド チュートリアルで、リソースバンドルローダーの詳細を学ぶことができます。また、クラスの
_entry
および_resourceBundleLoader
フィールドを必ず定義してください。private final BlogsEntry _entry; private final ResourceBundleLoader _resourceBundleLoader;
-
クラス宣言とコンストラクターがブログ資産レンダラー用に定義されたので、資産レンダラーを資産に接続し始める必要があります。 これを実現するゲッターメソッドは次のとおりです。
@Override public BlogsEntry getAssetObject() { return _entry; } @Override public String getClassName() { return BlogsEntry.class.getName(); } @Override public long getClassPK() { return _entry.getEntryId(); } @Override public long getGroupId() { return _entry.getGroupId(); } @Override public String getType() { return BlogsEntryAssetRendererFactory.TYPE; } @Override public String getUuid() { return _entry.getUuid(); }
getAssetObject()
メソッドは、追跡するアセットとしてコンストラクターで設定されたBlogsEntry
を設定します。 同様に、getType()
メソッドは、アセットレンダラーがレンダリングするアセットのタイプのブログアセットレンダラーファクトリを参照します。 もちろん、アセットレンダラーのタイプはblog
であり、後で工場で設定します。 -
アセットレンダラーは、エンティティを所有するポートレットにリンクする必要があります。 ブログアセットの場合、そのポートレットIDはブログアプリケーションにリンクする必要があります。
@Override public String getPortletId() { AssetRendererFactory<BlogsEntry> assetRendererFactory = getAssetRendererFactory(); return assetRendererFactory.getPortletId(); }
getPortletId()
メソッドは、BlogsEntry
アセットレンダラーファクトリをインスタンス化し、ブログエントリの表示に使用されるポートレットのポートレットIDを取得します。 -
アセットのワークフローを有効にすることに興味がある場合は、ブログアプリケーションで実行したのと同様の次のメソッドを追加します。
@Override public int getStatus() { return _entry.getStatus(); }
このメソッドは、アセットのワークフローステータスを取得します。
-
多くの開発者が資産に求めているもう1つの人気のある機能は、コメントすることです。 これは、ブログアプリケーションで次の方法で有効になります。
@Override public String getDiscussionPath() { if (PropsValues.BLOGS_ENTRY_COMMENTS_ENABLED) { return "edit_entry_discussion"; } else { return null; } }
コメントセクションは、null以外の値を返す場合に使用可能なオプションです。 アセットのコメントセクションを表示するには、Asset Publisherの オプション (
)→ 構成 → セットアップ → ディスプレイ設定 セクションで有効にする必要があります。
-
少なくとも、アセットのタイトルと概要を作成する必要があります。
BlogsEntryAssetRenderer
が行う方法は次のとおりです。@Override public String getSummary( PortletRequest portletRequest, PortletResponse portletResponse) { int abstractLength = AssetUtil.ASSET_ENTRY_ABSTRACT_LENGTH; if (portletRequest != null) { abstractLength = GetterUtil.getInteger( portletRequest.getAttribute( WebKeys.ASSET_ENTRY_ABSTRACT_LENGTH), AssetUtil.ASSET_ENTRY_ABSTRACT_LENGTH); } String summary = _entry.getDescription(); if (Validator.isNull(summary)) { summary = HtmlUtil.stripHtml( StringUtil.shorten(_entry.getContent(), abstractLength)); } return summary; } @Override public String getTitle(Locale locale) { ResourceBundle resourceBundle = _resourceBundleLoader.loadResourceBundle( LanguageUtil.getLanguageId(locale)); return BlogsEntryUtil.getDisplayTitle(resourceBundle, _entry); }
これら2つのメソッドはアセットに関する情報を返すため、アセット発行者はそれを表示できます。 タイトルと概要は何でもかまいません。
Blogsの
getSummary(...)
メソッドは、ブログアセットの抽象的な説明を返します。 アブストラクトの説明が存在しない場合、ブログのコンテンツがアブストラクトとして使用されます。 要約やその他のコンテンツ仕様については、後ほど詳しく説明します。Blogsの
getTitle(...)
メソッドは、コンストラクターで構成したリソースバンドルローダーを使用して、モジュールのリソースバンドルをロードし、アセットの表示タイトルを返します。 -
アセットに一意のURLを提供する場合は、URLタイトルを指定できます。 URLタイトルは、アセットに直接アクセスするために使用されるURLです(例:localhost:8080 /-/ this-is-my-blog-asset)。 これを行うには、次の方法を提供します。
@Override public String getUrlTitle() { return _entry.getUrlTitle(); }
-
isPrintable()
メソッドを挿入します。これにより、アセットのAsset Publisherの印刷機能が有効になります。@Override public boolean isPrintable() { return true; }
アセットがAsset Publisherに表示されると、印刷アイコンが表示されます。 アイコンを表示するには、Asset Publisherの オプション → 構成 → セットアップ → ディスプレイ設定 セクションで有効にする必要があります。
-
アセットが権限で保護されている場合、アセットレンダラーを介してアセットの権限を設定できます。
BlogsEntryAssetRenderer
クラスで使用される例については、以下のロジックを参照してください。@Override public long getUserId() { return _entry.getUserId(); } @Override public String getUserName() { return _entry.getUserName(); } public boolean hasDeletePermission(PermissionChecker permissionChecker) { return BlogsEntryPermission.contains( permissionChecker, _entry, ActionKeys.DELETE); } @Override public boolean hasEditPermission(PermissionChecker permissionChecker) { return BlogsEntryPermission.contains( permissionChecker, _entry, ActionKeys.UPDATE); } @Override public boolean hasViewPermission(PermissionChecker permissionChecker) { return BlogsEntryPermission.contains( permissionChecker, _entry, ActionKeys.VIEW); }
ユーザーにアセットを表示する権限があるかどうかを確認する前に、
getUserId()
およびgetUserName()
を使用して、エントリのユーザーIDとユーザー名をそれぞれ取得する必要があります。 次に、ユーザーがブログエントリを表示、編集、または削除できるかどうかをチェックする3つのブール型のアクセス許可メソッドがあります。 これらの権限は、特定のエンティティインスタンス用です。 ブログエントリのグローバルアクセス許可は工場で実装されますが、これは後で行います。
驚くばかり\! ブログアセットレンダラーを設定する方法を学習しました。
- 資産に接続する
- アセットのポートレットに接続します
- ワークフロー管理を使用する
- コメントセクションを使用する
- アセットのタイトルと概要を取得する
- アセットの一意のURLを生成します
- 印刷アイコンを表示する
- アセットの権限を確認してください
次に、HTMLをレンダリングするテンプレートを作成する必要があります。 BlogsEntryAssetRenderer
は、JSPテンプレートを使用してAsset PublisherのHTMLを生成するように構成されています。 次にこれを行う方法について詳しく学習します。