新しい商品タイプの追加¶
このチュートリアルでは、3つのインターフェースを実装することで、新しい商品タイプを追加する方法を紹介します。 CPType ,、 ScreenNavigationCategory 、 ScreenNavigationEntry です。
商品タイプを使用して、類似の特性を共有する商品をグループ化できます。 Liferay Commerceでは、3 種類の商品タイプがすぐに利用できます。 Simple , Grouped , Virtual の3種類です。
概要¶
サンプルをデプロイする¶
このセクションでは、商品タイプをLiferay Commerceのインスタンスで実行する例を示します。
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.55-ga55。
http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順に従います。
Acme Commerce Product Type をダウンロードし、解凍してください。
curl https://learn.liferay.com/commerce/latest/ja/developer-guide/catalog/liferay-c1n4.zip -O
unzip liferay-c1n4.zip
サンプルをビルドしてデプロイします。
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
注釈
このコマンドは、デプロイされたjarをDockerコンテナの
/opt/liferay/osgi/modules
にコピーするのと同じです。Liferay Dockerコンテナコンソールでデプロイを確認します。
STARTED com.acme.c1n4.web_1.0.0
サンプルの商品タイプが追加されたことを確認します。 ブラウザで
https://localhost:8080
を開きます。 アプリケーションメニュー()をクリックし、 [commerce] → [商品] に移動します。 次に、(+)アイコンをクリックして、新しい商品を追加します。 新しい商品タイプ(「サンプル」)が、選択するタイプのリストに表示されます。
注釈
Liferay Commerce 2.1以前のバージョンでは、[コントロールパネル] → [commerce] → [商品] に移動して商品ページを検索します。
これで、CPType
を実装する新しい商品タイプのビルドとデプロイが完了しました。
さらに詳しく見ていきましょう。
サンプルの説明¶
このセクションでは、デプロイしたサンプルについて確認します。 カスタム画面用の商品タイプクラスと画面ナビゲーション・エントリークラスの2つのクラスを作成します。 次の手順を実行します。
OSGi登録用の商品タイプのクラスに注釈を付ける¶
商品タイプのクラスは、CPType
インターフェイスを実装します。
@Component(
property = {
"commerce.product.type.display.order:Integer=16",
"commerce.product.type.name=c1n4"
},
service = CPType.class
)
public class C1N4CPType implements CPType {
Liferay Commerceがこの商品タイプを既存の商品タイプと区別できるように、商品タイプ名は一意の値である必要があります。
commerce.product.type.display.order
値は、商品タイプのリストでこの商品タイプがUIに表示される範囲を示します。 例えば、 仮想商品タイプ の値は15です。 作成した商品タイプに値16を指定すると、仮想タイプの直後に表示されます。
CPType
インターフェイスを確認する¶
商品タイプクラスでCPType
の以下のメソッドを実装します。
public void deleteCPDefinition(long cpDefinitionId) throws PortalException;
このメソッドで、商品タイプのカスタム削除ロジックを追加します。
public String getLabel(Locale locale);
これは、商品タイプを説明するテキストラベルを返します。 言語キーでラベルを取得する際のリファレンスについては、 C1N4CPType.java の実装を参照してください。
public String getName();
これは、商品タイプの名前を返します。 この名前は、UIに表示される名前に対応する言語キーの場合があります。
OSGi登録用の画面ナビゲーションエントリークラスに注釈を付ける¶
画面ナビゲーション・エントリークラスでは、ScreenNavigationCategory
とScreenNavigationEntry
の両方のインターフェイスを実装しています。
@Component(
property = {
"screen.navigation.category.order:Integer=11",
"screen.navigation.entry.order:Integer=11"
},
service = {ScreenNavigationCategory.class, ScreenNavigationEntry.class}
)
public class C1N4ScreenNavigationEntry
implements ScreenNavigationCategory, ScreenNavigationEntry<CPDefinition> {
Liferay Commerceがこの画面を既存の画面とは別の画面として区別できるように、ナビゲーション画面クラスに個別のキーを提供することが重要です。 すでに使用されているキーを再利用すると、既存の関連付けられているナビゲーション画面が上書きされます。
screen.navigation.category.order
およびscreen.navigation.entry.order
値は、この画面が表示される商品タイプ画面の位置を決定します。 たとえば、 [詳細]画面クラス の値は10に設定されています。値を11に設定すると、カスタム画面がリストでその後に表示されるようになります。
商品タイプを完成させる¶
商品タイプは、商品を削除するためのバックエンドロジック、ナビゲーションメニューで画面をレンダリングするロジック、およびカスタム画面自体で構成されます。 以下を行います。
モジュールにServletContext
を構成する¶
バンドルのシンボリックネームを使用してServletContext
をScreenNavigationEntry
クラスで定義し、モジュール内のJSPを見つけられるようにします。
@Reference(target = "(osgi.web.symbolicname=com.acme.c1n4.web)")
private ServletContext _servletContext
osgi.web.symbolicname
に設定した値は、 bnd.bndファイル のBundle-SymbolicName
の値と一致します。 これらの値は、JSPを見つけるためにServletContext
と一致する必要があります。
ServletContext
が正しく生成されるように、bnd.bndファイルでWeb-ContextPath
の一意の値を宣言します。 この例では、Web-ContextPath
は/c1n4-web
に設定されています。 これらの値のリファレンスについては、 bnd.bnd を参照してください。
商品タイプ削除ロジックをdeleteCPDefinition
に追加する¶
この例では、 deleteCPDefinition
に追加するロジックは必要ありません。
JSPを追加して、カスタム画面をレンダリングする¶
今回の例では、「Hello C1N4.」と表示するJSPを追加しています。
<h1>Hello C1N4.</h1>
フォームやMVCアクションコマンドなど、カスタム画面で必要な他の入力またはアクションをここに実装します。 JSPからアクセスできるMVCアクションコマンドを追加する方法については、 MVC Action Command を参照してください。
言語キーをLanguage.properties
に追加する¶
モジュール内の Language.properties ファイルに言語キーとその値を追加します。
c1n4-commerce-product-type=C1N4 Commerce Product Type
c1n4-screen-navigation-entry=C1N4 Screen Navigation Entry
詳細は、 アプリケーションのローカライズ を参照してください。
まとめ¶
これで、 CPType
インターフェイスを実装するための基本を理解し、Liferay Commerceに新しい商品タイプとその独自のカスタム画面を追加しました。