Revoke Promotion
9 カタログのナビゲーションと検索
コマース・サイトは、顧客がサイト内をナビゲートし、購入したい製品を見つけるためのメカニズムを提供する 必要があります。Oracle ATG Web Commerceには、サイトにナビゲーション・メカニズムと検索メカニズムを 実装するために使用できるサービスが含まれています。
この章は次の項から構成されています。
parentCategoryプロパティの使用 カタログ項目の表示
カタログのナビゲーション カタログの検索
この章では、atg.commerce.catalog.SearchFormHandlerに基づいているCommerceが本来備えてい る検索機能に固有のコンポーネントのみを説明します。これはOracle ATG Web Commerce Search製品と は異なります。検索で使用されるコンポーネントに関する一般情報については、『ATG Web Commerce Page Developer’s Guide』の検索フォームの使用を参照してください。Oracle ATG Web Commerce Searchを Oracle ATG Web Commerceサイトの一部として使用する方法を含む、Searchの詳細は、『ATG Web Commerce Search Installation and Configuration Guide』および『ATG Web Commerce Search Administration Guide』を参照してください。
parentCategory プロパティの使用
カテゴリまたは製品は複数のカテゴリの子になる可能性があります。複数の親カテゴリを指定するとカタログは より柔軟性が高くなりますが、ナビゲーションが複雑になる可能性があります。顧客がカタログ階層間の移動 によってではなく、検索機能を使用してカテゴリや製品にアクセスする場合は、特にその傾向が強くなります。
顧客が上の階層に移動する場合、ストア側は移動先の親カテゴリを決定する必要があります。その目的でデ フォルトの親カテゴリを指定するために、カテゴリ項目および製品項目のparentCategoryプロパティを使 用できます。製品は、製品が表示されるカタログごとに複数のparentCategoriesを持つことができます。
たとえば、カタログ階層の1つ上のレベルまで顧客を誘導するリンクが各ページにあるとします。複数の親 カテゴリを持つ製品を顧客が表示している場合、サイトは顧客がどの親カテゴリから製品にアクセスしたかを 追跡して、その親カテゴリを指すようにリンクを設定できます。しかし、顧客がカタログ階層内をナビゲートし たのではなく、検索によって製品を見つけた場合は、parentCategoryプロパティによって指定されたカテ ゴリを指すようにリンクを設定できます。
カタログでparentCategoryプロパティに異なる名前を使用している場合は、
/atg/commerce/catalog/CatalogTools.propertiesファイル内のparentCategoryPropertyName プロパティをプロパティの実際の名前に設定します。たとえば、次のようになります。
parentCategoryPropertyName=higherCategory
カタログ、カテゴリおよび製品のプロパティおよび製品カタログを拡張する方法の詳細は、『ATG Web Commerce Programming Guide』を参照してください。
カタログ項目の表示
この項で説明するコンポーネントを利用すれば、製品カタログ内の項目を検索し、その項目をユーザーに 表示できます。
カタログでの項目の検索
atg.commerce.catalog.custom.CatalogItemLookupDropletクラスを使用してリポジトリ内の項目を 検索し、表示します。このサーブレットBeanは、リポジトリ、リポジトリID、サイトID、サイト・スコープ、カタロ グおよび項目タイプを指定する入力パラメータを受け取り、指定された項目をページ上にレンダリングしま す。
入力パラメータを介してリポジトリと項目タイプを指定するかわりに、サーブレットBeanのプロパティ・ファイ ルを介してリポジトリと項目タイプを設定できます。Oracle ATG Web Commerceには、製品カタログをデフォ ルトのリポジトリとして使用し、特定の項目タイプを検索するように構成されている複数のルックアップ・コン ポーネントが含まれています。次の3つのコンポーネントは、すべてCatalogItemLookupDropletに基 づいており、/atg/commerce/catalog/にあります。
CategoryLookup ProductLookup SKULookup
サイトに複数のカタログが含まれている場合、またはカタログにない項目タイプをカタログが使用している場 合は、追加のCatalogItemLookupDropletコンポーネントを作成します。CatalogItemLookupDroplet サーブレットBeanの詳細は、付録A: Oracle ATG Web CommerceサーブレットBeanの
CatalogItemLookupDropletを参照してください。
/atg/commerce/catalog/内の次の追加のルックアップ・コンポーネントは、カタログまたはサイトのフィル
タ機能を持っていないItemLookupDropletに基づいています。
MediaLookup CatalogLookup
ItemLookupDropletについては、『ATG Web Commerce Page Developer’s Guide』を参照してください。こ のドロップレットは、ギフト・リスト機能によっても使用されます。『ATG Web Commerce Programming Guide』
のギフト・リストとウィッシュ・リストの設定に関する項を参照してください。
次の例は、ProductLookupコンポーネントを使用して現在の製品を表示するJSPの部分を示しています。
製品のリポジトリIDは、このページにリンクしているページから(itemIdパラメータを介して)このページに渡 されます。
<dsp:droplet name="/atg/commerce/catalog/ProductLookup">
<dsp:param param="itemId" name="id"/>
<dsp:oparam name="output">
<p><b><dsp:valueof param="element.displayName"/></b>
<p><dsp:getvalueof id="img13" param="element.largeImage.url"
idtype="java.lang.String">
<dsp:img src="<%=img13%>"/>
</dsp:getvalueof>
<dsp:valueof param="element.longDescription"/>
</dsp:oparam>
</dsp:droplet>
ForEachItemInCatalog サーブレット Bean
このサーブレットBeanは、1つの点を除いて、よく使用されるForEach Beanと同じです。違いは、このサーブ レットBeanがユーザーの現在のカタログ内に存在する項目に対してのみ繰り返し処理を行うことです
(ForEachサーブレットBeanについては、『ATG Web Commerce Page Developer’s Guide』を参照してくださ い)。このサーブレットBeanには、追加のオプション・パラメータprofileが含まれています。ユーザーのプロ ファイルには、そのユーザーが表示できるカタログに関する情報が格納されます。プロファイルを指定しな い場合は、そのかわりに、現在のセッション限定プロファイルが使用されます。
relatedProducts、relatedCategories、replacementSkusなど、現在のカタログに必ずしも存在しな い可能性がある項目のリストに対して、このサーブレットBeanを使用します。
項目が表示されたときのメッセージの送信
顧客がカタログ内の項目を表示したときに、atg.userprofiling.ViewItemEventSenderサーブレット Beanを使用してJMSメッセージを送信できます。ViewItemEventSenderは
atg.userprofiling.dms.ViewItemMessageクラスのJMSオブジェクト・メッセージを送信します。
ViewItemMessageオブジェクトは、現在表示されているリポジトリ項目および項目の場所を識別します。こ
れらのメッセージを処理のトリガーに使用できます。たとえば、表示された製品に関する情報を顧客のプロ ファイルに格納するようにメッセージ・リスナーを構成できます。
ViewItemEventSenderは、表示される項目を指定するeventobjectと呼ばれる1つの入力パラメータ を取ります。出力パラメータまたはオープン・パラメータはありません。
Oracle ATG Web Commerceには、/atg/commerce/catalog内の2つのViewItemEventSenderコン ポーネントであるProductBrowsedとCategoryBrowsedが含まれています。どちらのコンポーネントを使 用するかによって、渡されるeventobjectは、製品またカテゴリのどちらかのリポジトリ項目になります。
次の例は、製品が表示されたときにProductBrowsedコンポーネントを使用してメッセージを送信するJSP の部分を示しています。製品のリポジトリIDは、このページにリンクしているページから(itemIdパラメータ を介して)このページに渡されます。
<dsp:droplet name="/atg/commerce/catalog/ProductLookup">
<dsp:param param="itemId" name="id"/>
<dsp:oparam name="output">
<dsp:droplet name="/atg/commerce/catalog/ProductBrowsed">
<dsp:param param="element" name="eventobject"/>
</dsp:droplet>
</dsp:oparam>
</dsp:droplet>
カタログのナビゲーション
カタログが階層構造を持っている場合は、顧客がカタログ階層間を移動することによって製品までナビゲー トできるようにサイトを設定できます。カタログ階層の構造は、個々のカテゴリの子カテゴリと子製品によって 決まります。たとえば、食料品店サイトでは、ユーザーがまずフルーツ・カテゴリを選択し、次にかんきつ類カ テゴリ(フルーツの子カテゴリ)を、最後にオレンジ製品(かんきつ類カテゴリの子製品)を選択することで、オ レンジと呼ばれる製品にたどりつきます。
ルート・カテゴリの表示
一般的に、カタログ・ホーム・ページにはルート・カテゴリのリストが表示されます。他のカテゴリと異なり、他 のカテゴリのchildCategoriesプロパティを介してルート・カテゴリを見つけることはできません。ルート・カ テゴリは、ユーザーのカタログのallRootCategoriesプロパティに表示されるカテゴリです。
次の例では、ForEachサーブレットBeanをallRootCategoriesプロパティと組み合せて使用して、ルー ト・カテゴリを見つけています。
<HTML> <HEAD>
<TITLE>Home Page</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1>Home Page</H1>
<dsp:droplet name="/atg/dynamo/droplet/ForEach">
<dsp:param bean="/atg/userprofiling/Profile.catalog.allRootCategories"
name="array"/>
<dsp:oparam name="output">
<tr>
<td>
<dsp:getvalueof id="a26" param="element.template.url"
idtype="java.lang.String">
<dsp:a href="<%=a26%>">
</dsp:getvalueof>
<dsp:param param="element.repositoryId" name="id"/>
<dsp:param value="pop" name="navAction"/>
<dsp:param param="element" name="Item"/>
<dsp:valueof param="element.displayName"/></dsp:a></td>
</tr>
</dsp:oparam>
<dsp:oparam name="empty">
<p>No root categories found.
</dsp:oparam>
</dsp:droplet>
</BODY> </HTML>
子カテゴリと子製品の表示
カタログ・ページでサーブレットBeanを使用して、1つのカテゴリのすべての子カテゴリおよび子製品のリス トを表示できます。たとえば、食料品店サイトのフルーツ・ページには、多数のフルーツ製品(リンゴ、洋梨)
と子カテゴリ(かんきつ類)が表示されます。ユーザーがこのページで製品の名前をクリックすると、サイトは その製品を表示します。ユーザーがカテゴリの名前をクリックすると、サイトはそのカテゴリの子カテゴリと子 製品のリストを表示します。
次の例は、現在のカテゴリの個々の子カテゴリと子製品のdisplayNameプロパティをレンダリングするJSP の部分を示しています。これらの値は、それぞれ対応する項目へのリンクとしてレンダリングされます。現在 のカテゴリのリポジトリIDは、このページにリンクしているページから(itemIdパラメータを介して)このペー ジに渡されます。
<dsp:droplet name="/atg/commerce/catalog/CategoryLookup">
<dsp:param param="itemId" name="id"/>
<dsp:oparam name="output">
<dsp:droplet name="/atg/dynamo/droplet/ForEach">
<dsp:param param="element.childCategories" name="array"/>
<dsp:oparam name="outputStart">
<p><b>Child Categories:</b>
<ul>
</dsp:oparam>
<dsp:oparam name="output">
<li><dsp:getvalueof id="a24" param="element.template.url"
idtype="java.lang.String">
<dsp:a href="<%=a24%>">
<dsp:valueof param="element.displayName"/>
<dsp:param param="element.repositoryId" name="itemId"/>
</dsp:a></dsp:getvalueof></li>
</dsp:oparam>
<dsp:oparam name="outputEnd">
</ul>
</dsp:oparam>
</dsp:droplet>
<dsp:droplet name="/atg/commerce/catalog/ForEachItemInCatalog">
<dsp:param param="element.childProducts" name="array"/>
<dsp:oparam name="outputStart">
<p><b>Child Products:</b>
<ul>
</dsp:oparam>
<dsp:oparam name="output">
<li><dsp:getvalueof id="a61" param="element.template.url"
idtype="java.lang.String">
<dsp:a href="<%=a61%>">
<dsp:valueof param="element.displayName"/>
<dsp:param param="element.repositoryId" name="itemId"/>
</dsp:a></dsp:getvalueof></li>