Revoke Promotion
10 製品比較の実装
コマース・サイトは、多くの場合、サイト・ユーザーが製品カタログ内の品目を比較できる機能を必要とします。単 純なサイトでは、1つの製品比較リストをユーザーに提供し、ユーザーがリスト内で製品を追加および削除したり、
リストで製品の特性を比較したりできるようにします。より複雑なサイトでは、タイプの異なる品目を比較するための 複数の比較リスト(たとえば、カメラを比較するリストとテレビを比較するリストなど)をユーザーに提供します。Oracle
ATG Web Commerceは、これらの単純な要件と複雑な要件の両方を満たす製品比較システムを備えています。
Commerce製品比較システムのデフォルトの実装を使用すれば、ユーザーは、製品のカテゴリ、製品、SKU
および在庫に関する情報を使用して任意の数の製品を比較できます(アプリケーション開発者がシステムを 拡張して、追加の情報を含めている可能性があることに注意してください)。さらに、ページ開発者は、製品 比較情報を表形式で表示でき、ユーザーはその表を操作して、表示される情報のソート基準を変更できます。
製品比較システムを実装する方法を説明するこの章は、次の項から構成されています。
ProductListコンポーネントの理解 製品比較リストに対する問合せ 製品比較リストの管理
製品比較ページの例
ProductList コンポーネントの理解
Oracle ATG Web Commerceには、Nucleusの/atg/commerce/catalog/comparison/ProductListに
あるProductComparisonListのセッション限定インスタンスがデフォルトで含まれています。ただし、アプ
リケーション開発者が複数の比較リスト(たとえば、カメラを比較するリスト、テレビを比較するリストなど)を管 理するために、ProductComparisonListの追加のインスタンスを構成している可能性があります。
ProductListコンポーネントのitemsプロパティには、製品比較リスト内の個々の製品を表すEntryオブ
ジェクトのリストが格納されます。個々のEntryオブジェクトは、カテゴリ、製品、SKUおよび在庫の情報を 1つのオブジェクトにまとめて、次の表で説明するプロパティをデフォルトで公開します(開発者が製品比較 システムを拡張して、プロパティを追加している可能性があることに注意してください)。
プロパティ名 プロパティのタイプ 説明
product RepositoryItem 比較の対象となる製品。
category RepositoryItem 比較の対象となる製品のカテゴリ。製品がリストに追加された
ときにカテゴリが明示的に設定されていない場合は、製品の デフォルトの親カテゴリが使用されます。製品のデフォルトの 親カテゴリが設定されていない場合は、categoryプロパティ がnullになります。
プロパティ名 プロパティのタイプ 説明
sku RepositoryItem 製品のSKU。製品がリストに追加されたときにSKUが明示的
に設定されていない場合は、製品のchildSkusリスト内の最 初のSKUが使用されます。製品が子SKUを持っていない 場合は、skuプロパティがnullになります。
inventoryInfo InventoryData 特定の製品およびSKUの在庫ステータスを表す
InventoryDataオブジェクト。skuプロパティがnullである 場合、または在庫情報が利用できない場合は、
inventoryInfoプロパティがnullになります。
productLink String カタログ内の製品のページにリンクしているアンカー・タグを
指定するHTMLフラグメント。リンクのデフォルト形式は
<a href="product.template.url id=product.
repositoryId">product.displayName</a>です。ただ し、ProductComparisonList.productLinkFormatプロ パティを設定することによって形式を変更できます。
注意: 表形式で製品比較情報を表示する場合は、次の例に 示すように、表情報を保持するTableInfoオブジェクトの構 成でproductLinkプロパティを使用できます。
columns=\
Product Name=productLink,\
Price=sku.listPrice,\
…
あるいは、同様に、表の列に製品リンクを表示する一方で、製 品の表示名で列をソートする場合は、次の方法で例を変更で きます。
columns=\
Product Name=productLink;
product.displayName,\
Price=sku.listPrice,\
…
TableInfoコンポーネントの詳細は、『ATG Web Commerce Page Developer’s Guide』のソート可能な表の実装を参照して ください。
categoryLink String カタログ内のカテゴリのページにリンクしているアンカー・タグ
を指定するHTMLフラグメント。リンクのデフォルト形式は<a href=category.template.url
id=category.repositoryId>category.displayName</
a>です。ただし、
ProductComparisonList.categoryLinkFormatプロパ ティを設定することによって、形式を変更できます。
注意: productLinkプロパティと同様に、categoryLinkプ ロパティもTableInfoコンポーネントの構成で使用できま す。詳細は、この表のproductLinkプロパティの説明を参 照してください。
プロパティ名 プロパティのタイプ 説明
id Int リスト・エントリを指定する一意のID。Javaコードで
ProductComparisonList.getItems(id)を呼び出すこと によって、またはJSPで<dsp:valueof
bean="ProductList.entries[id]"/>を使用することに よって、このプロパティを使用して個別のエントリを取得できま す。たとえばフォーム・ハンドラでこのプロパティを使用して、
特定のエントリを削除することもできます。
次の例に示すように、よく知られたJSP構文を使用して、製品比較リスト内のエントリのプロパティ(つまり
Entryオブジェクト)を参照できます。
<dsp:droplet name="ForEach">
<dsp:param bean="ProductComparisonList.items" name="array"/>
<dsp:oparam name="output">
<p>Product Name: <dsp:valueof param="element.product.displayName"/><br>
Category: <dsp:valueof param="element.category.displayName"/><br>
Inventory: <dsp:valueof
param="element.inventoryInfo.inventoryAvailabilityMsg"/><br>
</dsp:oparam>
</dsp:droplet>
製品比較リストに対する問合せ
カテゴリ、製品およびSKUを指定すれば、ProductListContainsサーブレットBeanは、製品比較リスト にその製品が含まれているかどうかを問い合せます。
Oracle ATG Web Commerceには、Nucleusの
/atg/commerce/catalog/comparison/ProductListContainsにあるProductListContainsのグ ローバルスコープのインスタンスがデフォルトで含まれています。
ProductListContainsサーブレットBeanは次の入力パラメータを取ります。
productList(必須)
検査の対象となるProductComparisonListオブジェクト。
productID(必須)
productList内で検索する製品のリポジトリID。
categoryID
productList内で検索するカテゴリのリポジトリID。
製品のカテゴリIDを指定しない場合、ProductListContainsは、categoryプロパ ティがその製品のデフォルト・カテゴリと一致するリスト・エントリを検索し、その製品のデ フォルト・カテゴリがない場合は、categoryプロパティがnullであるリスト・エントリを検 索します。
skuID
productList内で検索するSKUのリポジトリID。
製品のSKUを指定しない場合、ProductListContainsは、skuプロパティがその製 品の最初の子SKUと一致するリスト・エントリを検索し、その製品のSKUがない場合は、
skuプロパティがnullであるリスト・エントリを検索します。
repositoryKey
検索する品目が含まれている製品カタログ・リポジトリを選択するためにCatalogTools に渡すキー。キーからカタログへのマッピングは、CatalogToolsで定義されます。この パラメータが設定されていない場合は、デフォルトの製品カタログ・リポジトリが使用され ます。
このオプション・パラメータは、多くの場合、ロケールに合わせて代替製品カタログを使 用する必要のあるローカライゼーションで役立ちます。
ProductListContainsは、出力パラメータを設定しません。ただし、次のいずれかのオープン・パラメータ
をレンダリングします。
true
製品比較リストに特定の製品、カテゴリおよびSKUが含まれているとレンダリングされま す。
false
製品比較リストに特定の製品、カテゴリおよびSKUが含まれていないとレンダリングされ ます。
ProductListContainsサーブレットBeanのJSPの例については、この章の製品比較ページの例を参照
してください。
製品比較リストの管理
ProductListHandlerフォーム・ハンドラは製品比較リストを管理します。
Oracle ATG Web Commerceには、Nucleusの/atg/commerce/catalog/comparison/にある
ProductListHandlerの要求限定のインスタンスがデフォルトで含まれています。ProductListHandler は、/atg/commerce/catalog/comparison/にあるProductListコンポーネントによって管理される製 品比較リストを操作するように構成されています。つまり、ProductListコンポーネント
(atg.commerce.catalog.comparison.ProductComparisonListクラス)は、
ProductListHandler.productListで指定されます。
アプリケーションがProductComparisonListの複数のインスタンスを使用して複数の製品比較リスト(たと えばカメラを比較するリスト、テレビを比較するリストなど)を管理している場合は、個々のリストのコンテンツ を管理するためにProductListHandlerの複数のインスタンスを構成することをお薦めします。
アプリケーションが様々なロケール用の代替製品カタログを使用している場合は、製品比較リストを操作す るときに使用する製品カタログを指定できます。それには、ProductListHandler.repositoryKeyプロ
パティをCatalogToolsに渡すキーに設定します。CatalogToolsは、渡されたキーと、キーからカタログ
へのマッピングを使用して、製品カタログ・リポジトリを選択します。一般的に、フォーム内の非表示の入力 フィールド経由でProductListHandler.repositoryKeyプロパティを設定します。repositoryKeyプ ロパティが設定されていない場合は、デフォルトの製品カタログ・リポジトリが使用されます。
次の表では、製品比較リストの管理を目的とするProductListHandlerのハンドル・メソッドを説明します。