19 テンプレートとラッパーの作成
複数の様々なシナリオへの対処、コンテンツ・アセットへの適用、Webサイト全体またはページ・フラグメントのレンダリング、コンテンツのプレビューなどを行うためのテンプレートが必要です。WebCenter Sitesには、レイアウト、ページレット、ページという3つのタイプのテンプレートが用意されています。ラッパーは、実際のレイアウト・テンプレートをレンダリングする前に処理するビジネス・ロジックが含まれているSiteEntryアセットです。ラッパーを使用するのは、セキュリティ・チェックの実装のためにセッション・データにアクセスする場合や、どのロケールを設定するかを決定する場合や、フレンドリURLを逆アセンブルする場合などです。
トピック:
テンプレートの使用
WebCenter Sitesには、レイアウト、ページ、ページレットという3つのタイプのテンプレートがあります。レイアウト・テンプレートおよびページ・テンプレートは、ブラウザから直接呼び出すことができますが、ページレット・テンプレートはできません。レイアウト・テンプレートのみをアセットに割り当てることができます。レイアウト・テンプレートを使用してWebサイト全体をレンダリングし、ページ・テンプレートを使用してコンテンツをプレビューし、ページレット・テンプレートを使用してページ・フラグメントをレンダリングします。
次のトピックを参照してください。
レイアウト・テンプレート
レイアウト・テンプレートは、「使用」フィールドが「エレメントはレイアウトとして使用されます。」に設定されているテンプレート・アセットです。レイアウト・テンプレ-トはタイプ付きまたはタイプなしになります。
レイアウト・テンプレートの3つの主要特性は、次のとおりです。
このトピックではそれぞれの特性を詳述し、複数のセクションにわたって使用するユースケース・シナリオを提供して、それぞれの概念を示します。また、記事アセット用にレイアウト・テンプレートを作成する方法も説明しています。
レイアウト・テンプレートはブラウザから起動可能
レイアウト・テンプレートのページ名が指定されると、Satelliteサーブレットをコールし、コンテンツのアセット・タイプ(c)およびアセットID (cid)と一緒にページ名を渡すことによってWebページが取得され、レンダリングが行われます。
http://localhost:8080/cs/Satellite?pagename= <template_pagename>&c=Article&cid=1234567
指定されたテンプレートに対応するページ名を検索するには、テンプレート・アセットを調査し、「サイト・エントリ」フィールドのSiteCatalog Pagename列を参照します。
レイアウト・テンプレートはアセットに割当て可能
すべてのコンテンツ・アセットにはテンプレート・メタデータがあります。このメタデータは、「コンテンツ」タブを選択して表示できます。このフィールドでは、テンプレート名が格納されます。可能な値として、アセット・タイプやサブタイプに適用可能なすべてのレイアウト・テンプレートがあります。
WebCenter Sitesでは、Oracle WebCenter Sites: ContributorインタフェースのWebモードでアセットを調査および編集する際、「テンプレート」フィールドを使用します。WebCenter Sitesは、割り当てられたレイアウト・テンプレートをデフォルトのテンプレートとして使用し、アセットをレンダリングします(これは、単にアセットをプレビューするのみの場合でもあります)。つまり、Webモードでアセットを使用する際に使用できるのはレイアウト・テンプレートのみです。プレビューする場合、レイアウト・テンプレートは必要ありません。テンプレート・アセット、CSElementアセットおよびSiteEntryアセットのプレビューを参照してください。
Webモードでは、(ツールバーまたはメニューバーから)レイアウト変更機能を使用し、テンプレート・ピッカーを使用してレイアウト・テンプレートをビジュアルに選択することによって、デフォルトのレイアウト・テンプレートを割り当てることもできます。いずれの場合でも、アセットの「テンプレート」フィールドの値は変更されます。
レイアウト・テンプレートは通常、Webページ全体をレンダリングする
標準のWebページは、ドキュメント内に区画(通常は次の図に示すように、ヘッダー、フッター、サイド・バーおよびメイン領域)を定義するために<DIV>エレメントを使用して、HTMLコードで作成されます。
ヘッダー、フッター、サイド・バーおよびメイン領域を持つ標準的なWebページを示す次の例では、avisportsサンプル・サイトで使用するHTML構造が使用されています。
<!DOCTYPE html> <html> <head> </head> <body class="inner"> <div id="main"> <div id="header"> <!--contains the top menu bar --> </div> <div id="container"> <div class="content"> <!--contains the main area --> </div> <div class="side-bar"> <!--contains the side nav bar --> </div> </div> <div id="footer"> <!--contains the footer --> </div> </div> </body> </html>
実際のJSPページには、タグ・ライブラリ・ディレクティブ、開始と終了の<cs:ftcs>
タグ、およびキャッシュ・マネージャが使用する<render:logdep>
タグが含まれています。タグ・テクノロジを使用したWebサイト開発を参照してください。
<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %> <%@ taglib prefix="render" uri="futuretense_cs/render.tld" %> <cs:ftcs> <!DOCTYPE html> <% // The render:logdep tag is mandatory. It allows the cache manager // to automatically flush any page/pagelet generated using this // template ("tid" is automatically populated with the Template // asset id) %> <render:logdep cid='<%=ics.GetVar("tid")%>' c="Template" /> <html> <head> </head> <body class="inner"> <div id="main"> <div id="header"> <!--contains the top menu bar --> </div> <div id="container"> <div class="content"> <!--contains the main area --> </div> <div class="side-bar"> <!--contains the side nav bar --> </div> </div> <div id="footer"> <!--contains the footer --> </div> </div> </body> </html> </cs:ftcs>
ドキュメントは、<cs:ftcs>タグで囲む必要があります。このタグは、WebCenter Sitesのコンテキストを作成して、開始と終了の<cs:ftcs>
タグの内側に含まれているコードにWebCenter Sitesのタグが格納されることを、WebCenter Sitesに通知します。WebCenter Sitesは、これらのタグの外側にあるコードは一切認識しません。<cs:ftcs>
タグおよび<render:logdep>
タグの詳細は、「WebCenter Sitesタグの理解」を参照してください。
ページレット・テンプレート
ページレット・テンプレートは「使用」フィールドが「エレメント」に設定されているテンプレート・アセットで、HTMLページ内で使用されます。
ページレット・テンプレートの特性は、次のとおりです。
ページレット・テンプレートはブラウザから直接起動できない
ページレット・テンプレートにはページ名がありますが、WCS URLを使用してブラウザから直接ページレット・テンプレートにアクセスしようとすると、403 HTTPエラー・コード(アクセス拒否)が表示されます。
ページレット・テンプレートはアセットに割り当てできない
アセットの「テンプレート」フィールドで使用できるのはレイアウト・テンプレートだけです。つまり、ページレット・テンプレートを使用してこれらのアセットを直接プレビューすることはできません。ただし、プレビュー・テンプレートを設定して、編集ユーザーがページレット・テンプレートを簡単にプレビューできる方法を提供することは可能です。
ページレット・テンプレートはページ・フラグメントをレンダリングする
ページ・テンプレートは、Webページ全体ではなく、Webページ・フラグメントをレンダリングします。ページレット・テンプレートで再使用可能なページ・フラグメントをレンダリングすることが理想的です。たとえば、ページレット・テンプレートでこの図のような記事概要ブロックをレンダリングできます。
その後でレイアウト・テンプレートを使用して複数のページ・フラグメントをアセンブルし、完全なWebページを作成できます。再利用性を最大限に活かすために、ルック・アンド・フィールの観点から中立的なフラグメントをページレット・テンプレートで提供し、その際に、CSSスタイルシート・ルールを使用して見栄えを効果的に制御します(特定のフラグメントをどの位置に使用するかに基づき、明確なスタイルシート・ルールを適用するのみでレンダリングは異なってきます)。
ユースケース2: ページレット・テンプレートの使用
これまでのステップについては、「ユースケース1: 記事アセット用にレイアウト・テンプレートを作成」を参照してください。
記事詳細をレンダリングするコードを複数のコンテキストで再使用する場合は、コードをレイアウト・テンプレートから抽出し、ページレット・テンプレートに変換することをお薦めします。
次の特性を備えたテンプレート・アセットを作成してみましょう。
ページ・テンプレート
ページ・テンプレートは、「使用」フィールドが「エレメントはHTMLページ全体を定義するため、外部から呼び出すことができます。」に設定されているテンプレート・アセットです。
ページ・テンプレートの特性は、次のとおりです。
この項では、それぞれの特性を説明し、ページ・テンプレートの実際の使用方法を示します。
ページ・テンプレートはブラウザから起動可能
レイアウト・テンプレートと同様に、ページ・テンプレートは、Satelliteサーブレットを通してpagename
を起動することによって、ブラウザでのWebページのレンダリングに使用できます。
ページ・テンプレートはアセットに割り当てできない
レイアウト・テンプレートのみが割当て可能です。つまり、編集ユーザーはContributorインタフェースの「Webモード」でページ・テンプレートを使用できないことになり、レイアウト・テンプレートを使用する必要があります。
ページ・テンプレートはプレビュー用に使用可能
編集ユーザーはアセットを表示できるのみであり、編集機能は含まれないという点で、アセットのプレビューはContributorインタフェースでWebモードを使用する場合と異なります。アセットをプレビューする場合、デフォルトでは、WebCenter Sitesはアセットの「テンプレート」フィールドに設定されたレイアウト・テンプレートを使用します。
「プレビュー・テンプレートの変更」ダイアログが表示されると、テンプレート・ピッカーは次の有効なオプションを表示します。
-
現在のアセットに適用できるすべてのレイアウト・テンプレート
-
現在のアセットに適用できるすべてのページ・テンプレート
レイアウト変更テンプレート・ピッカーとは異なり、別のプレビュー・テンプレートを選択しても、このテンプレートはアセットの「テンプレート」フィールドに割り当てられません。選択されたプレビュー・テンプレートを使用して現在のアセットがレンダリングされるのみです。
ラッパーの使用
ラッパーには、実際のレイアウト・テンプレートをレンダリングする前に実行されるビジネス・ロジックが含まれています。これは、セキュリティ・チェックの実装のためにセッション・データにアクセスしたり、設定するロケールを決定したり、フレンドリURLを逆アセンブルするといったアクションを実行する場合に使用します。ラッパーは通常マークアップをレンダリングせず、通常キャッシュされません。
ラッパーについては、次のトピックを参照してください。
ラッパー・ページの作成
ラッパーは、「ラッパー・ページ」フラグが「はい」に設定されている普通のSiteEntryアセットです。これにより、作成中のアセットがラッパー・ページとして指定されます。「いいえ」フラグを選択すると、「ページレットのみ」フィールドが表示されます。SiteEntryアセットの作成を参照してください。
ラッパーのプレビュー
実装によっては、レイアウト・テンプレートを使用してアセットをレンダリングする前に、ラッパーを実行する必要もあります。アセットをプレビューする場合、またはContributorインタフェースのWebモードを使用している場合、WebCenter Sitesは、現在のサイトで少なくとも1つのラッパーが有効になっている場合に系統的にラッパーを実行します。
デフォルトのプレビュー・ラッパーが現在の編集サイトに対して構成されている場合、WebCenter Sitesでは、このラッパーが使用されます。そうでない場合は、リストに記載されている最初のラッパーが使用されます。複数のラッパーが使用可能な場合は、「表示」、「ラッパーを使用したプレビュー」を選択して、別のラッパーを変更できます。
WebCenter Sitesは、それぞれテンプレート・ページ名とレンダリング対象のアセットのタイプおよびIDを持つアセット・タイプ(c)とアセットID (cid)のパラメータを使用して、主にページ名を設定する最小限のプレビューURLをデフォルトで生成するため、プレビュー・モードでは、ラッパーは、レイアウト・テンプレートがWebページを正しくレンダリングするために追加の引数を必要とする場合に(たとえば、locale引数が実行できる場合がある)、特に役立ちます。
この場合は、必要に応じて追加の引数を設定し、レイアウト・テンプレートのレンダリングを進めることによって、プレビュー・ラッパーを定義できます。コールされるページ名は、childpagename
変数で使用可能です。
<cs:ftcs> <% // establish appropriate values for required template arguments %> <ics:setvar name="foo" value="bar" /> <render:satellitepage pagename='<%=ics.GetVar("childpagename")%>' args="c,cid,foo" /> </cs:ftcs> ...