新しい商品タイプの追加¶
このチュートリアルでは、次の3つのインターフェースを実装することで、新商品のタイプを追加する方法を説明します: CPType 、 ScreenNavigationCategory 、および ScreenNavigationEntry
商品タイプを使用して、類似の特性を共有する商品をグループ化できます。 Liferay Commerceには標準で次の3つの商品タイプが組み込まれています: Simple 、 Grouped 、および Virtual
サンプルをデプロイする¶
このセクションでは、商品タイプをLiferay Commerceのインスタンスで実行する例を示します。
新しいLiferayインスタンスを実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.22-ga22
http://localhost:8080
でLiferayにサインインします。メールアドレスtest@liferay.comとパスワードtestを使用してください。プロンプトが表示されたら、パスワードをlearnに変更します。
次に、以下の手順を実行します。
Acme Commerce Product Type をダウンロードして解凍します。
curl https://learn.liferay.com/commerce/latest/en/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
を開きます。 アプリケーションメニュー()をクリックし、[コマース]→[商品]に移動します。 次に、(+)アイコンをクリックして、新しい商品を追加します。 新しい商品タイプ(「Example」)が、選択するタイプのリストに表示されます。
注釈
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
値は、この画面が表示される商品タイプ画面の位置を決定します。 たとえば、[Details]画面クラスの値は10に設定されています。値を11に設定すると、カスタム画面がリストでその後に表示されるようになります。
商品タイプを完成させる¶
商品タイプは、商品を削除するためのバックエンドロジック、ナビゲーションメニューで画面をレンダリングするロジック、およびカスタム画面自体で構成されます。 以下を行います。
モジュールにServletContext
を構成する¶
モジュール内でJSPを見つけられるように、バンドルのシンボル名を使用してScreenNavigationEntry
クラスでServletContext
を定義します。
@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
詳細は、 アプリケーションのローカライズ を参照してください。