HTML書き出しテンプレートは、要求に応じてPortWebで生成されるHTMLを定義します。 このテンプレートには、すべてのHTMLコードを含めることができます。
PortWebは、正しいマクロ名が使用されていることを確認するだけで、入力されたHTMLを解析することはありません。 したがって、JavaScript、DHTML、XMLなど、作成可能なHTMLコードならどれでも使用できます。
HTML書き出しテンプレートには、テンプレートブロック、テンプレートマクロ、およびマクロブロックという PortWeb固有の3つの主な要素があります。
テンプレートブロック
PortWebのHTMLテンプレートは3つのブロックで構成されています。 HTMLは「ヘッダー」、「アイテム」、「フッター」で定義できます。 「ヘッダー」部分は各生成ページの先頭に配置され、「アイテム」部分は各テーブルセルに挿入され、また「フッター」は各生成ページの最後に配置されます。 Portfolioの「HTMLを編集」ダイアログボックスでは、各ブロックにHTMLを直接入力することができますが、「編集」メニューの「ペースト」を使って貼り付けることもできます。
PortWebテンプレートの各ブロックには以下のルールが適用されます。
ヘッダー
ヘッダーには<HTML>タグと<BODY>タグが必要です。
グリッドのレイアウトはテーブルとして作成されるため、ヘッダーは<TABLE>タグで終わる必要があります。
フッター
フッターの1行目では</TABLE>でテーブルを終了する必要があります。
フッターは</BODY>タグと</HTML>タグで終わる必要があります。
アイテム
アイテムブロックには、最初の<TD>タグと最後の</TD>タグを含めて特定のテーブルのセルの書式情報のすべてが表示されます。
PortWebは行タグ(<TR>と</TR>)を単独で、グリッドの寸法に基づいて生成します。 テーブルの最初または最後に自分で行を追加する場合を除き、この行タグはセルに含めないでください。
テンプレートマクロ
Portfolioでは、HTMLテンプレートにマクロ言語を使っているため、HTMLファイルを実際に作成するときに変数データを置き換えることができます。 すべてのマクロには%macro%の構文が使用されます。つまり、%で始まり%で終わります。 実際のHTMLで「%」を表示するにはテンプレートで2つの連続した%を使います(テンプレート中の%%は出力では%となります)。 マクロは、大文字と小文字を区別しません。
次の表にサポートされているマクロを示します。
PortWeb HTMLテンプレートのマクロ |
|
マクロ名 |
説明 |
%フィールド名% |
ユーザーが使用できるフィールドならどれでもアイテムブロックに挿入できます。 書き出し時、処理中の特定レコードのフィールド値がマクロに代入されます。 |
%thumbnail% |
サムネールを取得します。 これはパスがディスクに指定された前述のHTML書き出し機能とは異なることに注意してください。 |
%RID% |
特定のレコードのレコードIDを挿入します。 レコードIDはカタログ内で単一なものであり、「Thumbnail」、「Add」、「Remove」などのコマンドによってカタログ内の特定のレコードを参照するために使用されます。 |
%prev% |
前のHTMLファイルへの相対リンクが代入されます。 生成中のファイルが最初のファイルである場合、空の文字列が代入されます。 |
%next% |
HTMLファイルへの相対リンクが代入されます。 生成中のファイルが最初のファイルである場合、空の文字列が代入されます。 |
%pagelist% |
ぺージ番号(1 2 3 4 5など)による一連のリンクのHTMLを生成します。 |
%page% |
HTMLに現在のページ番号を挿入します。 |
%totalpages% |
グリッドサイズと、検索されたレコードセットの数を基に、生成できるページ数合計を挿入します。 |
%totalitems% |
送信されたクエリーに対して検索されたレコード数合計を挿入します。 |
%collectionadd% |
「Collection Add」要求に対してHTMLを生成します。 |
%collectionremove% |
「Collection Remove」要求に対してHTMLを生成します。 |
%collectionremove% |
「Collection Show」要求に対してHTMLを生成します。 |
特殊なマクロ
結果を生成するのがPortfolioクライアントかPortWebかに応じて異なる動作をするマクロがいくつかあります。
ページマクロ
[%prev%, %next%, %pagelist%]
Portfolioクライアントが%Prev%、%Next%、%PageList%の各マクロに対して生成するHTMLは、ディスク上のその他のHTMLへのリンクを生成します。 これらのマクロをPortWebで処理した場合に生成されたHTMLは、適切なパラメータのある新しいクイック検索またはクエリーコマンドになります。
たとえば、2行×4列を生成するテンプレートでは、以下のマクロを使用します。
<A HREF = "%Next%"> |
すると、以下のHTMLが作成されます。
<A HREF=".PortWeb?quickfind=test&catalog=Sample&template=Simple&offset=8"> |
カタログ名、クイック検索値、テンプレート名、およびオフセットはすべてオリジナルの要求に基づき自動的に決定されます。 ユーザーがリンクをクリックすると新規クイック検索コマンドがPortWebに送信され、9番目のアイテムから結果の生成を開始するように指示します。 この強力な機能は、PortWebが結果を1ページ単位でしか生成しないこと、すなわち応答時間が最低限に維持されることを意味します。
このようなリンクは手動でも作成できますが、Portfolioを使うと自動的に生成することができます。
サムネールマクロ
[%thumbnail%]
%thumbnail%マクロをPortWebで処理すると、サムネールコマンドが生成され、適切なパラメータが入力されます。
たとえば、以下のマクロ
<IMG SRC="%thumbnail%"> |
を含んだテンプレートは以下のHTMLを生成します。
<IMG SRC="PortWeb.dll?thumbnail=20&catalog=WebTest"> |
カタログ内のレコードIDとカタログ名がオリジナルの要求に基づき自動的に決定されます。
サムネールコマンドは、特定のサムネールのJPEGデータストリームを要求するときに使用します。 これにより、PortWebは先にデータをディスクに書き込むことなく、カタログ内の特定レコードからのサムネールデータを、ウェブブラウザにストリームで返すことができます。 通常、このコマンドはクエリー要求のHTML結果ファイルに埋め込まれます。 それによりブラウザは要求をPortWebに送り返すため、PortWebは各サムネールを個々のJPEGストリームとして返すことができます。
サムネールコマンドは常に画像リンクの一部である必要があります。
<IMG SRC="PortWeb.dll?thumbnail=80&catalog=WebTest"> |
設定しなければならない2つのパラメータを以下に示します。
サムネールコマンド |
|
パラメータ |
説明 |
thumbnail |
カタログ内のレコード固有のIDを指定します。 パラメータを最初に設定する必要があります。 |
catalog |
使用するカタログの別名を指定します。 エイリアスは、ディスク上のカタログまたはPortfolio Serverで公開しているカタログに、設定ファイルを使って割り当てられます。 |
使用方法
レコードIDを提供するために使用できるHTML書き出しマクロには %thumbnail%と%rid%の2つがあります。 %thumbnail%マクロでは、画像のSRCパラメータの完全パスが戻りますが、%RID%ではレコードのIDしか戻りません。例えば、
<IMG SRC="%thumbnail%"> |
<IMG SRC="PortWeb.dll?thumbnail=%rid%&catalog=Sample"> |
以下の例をご覧ください。%thumbnail%マクロは自動的にRIDとカタログ名をエンコードするため、通常はこのマクロの方が簡単に使用できますが、手動でその他のパラメータを設定したい場合にはサムネールコマンドを使用してください。
収集マクロ
[%CollectionAdd%, %CollectionRemove%, %CollectionShow%]
これらのコマンドは、PortWebがユーザーの選択内容を記憶しておくための動的なコマンドであるため、Portfolioクライアントで使用するためにHTML書き出し機能を使用する場合は、意味がありません。 PortWebでのこれらのコマンドの使用に関する詳細は「収集」を参照してください。
マクロブロック
HTML書き出しでは「マクロブロック」の最初と最後をマーカーで示すことができます。 マクロブロックは、Portfolioマクロの前後にあるHTML部分の最初と最後を定義します。 マクロが空の値を返す場合、そのマクロブロック内のHTMLテキストは生成されません。 マクロブロックは以下の形式のHTMLコメントタグを使って定義されます。
<!--Port4-%macro%-->と<!--/Port4-%macro%--> |
この場合、最初のコメントでブロックが開始され、2番目のコメントでブロックが終了されます。 PortWebがテンプレートを処理する際、コメントの開始を検出するたびにその中で定義されたマクロを評価します。 マクロの値がnil(たとえばフィールドが空)の場合、対応する終了コメントに遭遇するまで(またはセクションの最後に到達するまで)PortWebはそのHTMLコードを飛ばします。
マクロブロックで最も一般的に使用されるのは、追加の情報が生成されないようにするための「Previous(前ページ)」と「Next(次ページ)」マクロです。 以下の例をご覧ください。
<!--Port4-%prev%--> <A HREF="%prev%">前のページ</A> <!--/Port4-%prev%--> |
PortWebがこのセクションを検索の最初のページで処理する場合、最初のページが表示されていれば、%prev%マクロは「なし」を返します。 したがって、PortWebは終了コメントのマクロに遭遇するまでテキストを生成しません。
また以下の例では、フィールドマクロの前にフィールド名を追加しても、そのフィールドに値がなければフィールド名が表示されません。
<!--Port4-%filename%--> ファイル名: %filename%<BR> <!--/Port4-%filename%--> |
さらに複雑な例として、1つのフィールドのマクロを、まったく異なる情報を表示するかどうかを決定する論理フラグとして使用することがあげられます。
<!--Port4-%HasSource%--> <A HREF="%path%">%filename%</A> <!--/Port4-%HasSource%--> |
上記の例では、ソースファイルにハイパーリンクが挿入されますが、それはフィールド「HasSource」に値がある場合に限られます。
マクロブロックを入れ子にすることもできますが、PortWebは正しい終了ブロックに遭遇するまで、またはセクションの終わりになるまで、テキストの生成を停止してしまうため、入れ子が正しく行われていない場合やブロックが終了コメントで正しく終了されていない場合、予想外の結果を招く可能性があります。
特殊なマクロブロック
マクロブロックには、特定の状況で空になるように設定されているものがいくつかあります。
%prev%は、生成するページがレコードセットの最初のページである場合、空になります。 これはセットの最初のページで「前のページ」リンクを省略するために役立ちます。
%next%は、生成するページがレコードセットの最後のページである場合、空になります。 これはセットの最後のページで「次のページ」リンクを省略するために役立ちます。
%collectionadd%や%collectionremove%、%collectionshow%は、Portfolio 5.0クライアントによってページが生成される場合、空になります。 これらのコマンドはPortWebでしか有効ではないため、PortfolioクライアントとPortWebの両方で同じテンプレートを使用できます。
%totalitems%は、要求に対してアイテムが返されなかった場合、空になります。 これは、アイテムが見つかった場合にはHTMLの生成を行い、また検索でアイテムが見つからなかった場合にはテキスト、書式、ボタンなどを非表示にするような場合に便利です。
テンプレートファイルの操作
Portfolio 5.0クライアントには、PortfolioのHTMLテンプレートをディスクに保存する機能があります。 この機能は、大量のHTMLコードを扱っている場合、HTMLをテキストエディタで編集でき非常に便利です。 さらに、カタログ間でのテンプレートの移動や、その他のユーザーとの共有がはるかに簡単になります。 ただし、Portfolioのカスタム書式設定を使用した場合、Macromedia DreamweaverやAdobe PageMillなどのビジュアルなウェブページエディタでこうしたテンプレートを操作することは難しくなることに注意してください。
テンプレートファイルの構造
新しいテンプレートファイルを作成するとき、Portfolioは3つのテンプレートブロックの最初と最後を定義するために、以下のコメントタグを挿入します。 パラメータは以下のとおりです。
ヘッダー |
開始 |
<!—Port4-Header--> |
終了 |
<!—/Port4-Header--> |
|
アイテム |
開始 |
<!—Port4-Item--> |
終了 |
<!—Port4-Item--> |
|
フッター |
開始 |
<!—Port4-Footer--> |
終了 |
<!—/Port4-Footer--> |
開始と終了タグの間にはそれぞれ各ブロックの内容が含まれます。 このブロックタグを除いては、HTMLコードは「HTMLを編集」ダイアログボックスに表示されたものと同じです。
テンプレートが読み込まれると、Portfolioは同じタグのペアを探し、HTMLコードを挿入するブロックを決定して、 タグ自体は取り除きます。
テンプレートの書き出し
テンプレートを書き出すには、「HTMLを編集」ダイアログボックスの「書き出し...」ボタンをクリックして、次に表示されるダイアログボックスで ファイル名を指定します。 テンプレートを書き出したら、任意のテキストエディタでそのファイルを開くことができます。
テンプレートの読み込み
テンプレートを読み込むには「HTMLを編集」ダイアログボックスの「読み込み...」ボタンをクリックして、次に表示されるダイアログボックスで 読み込むファイルを指定します。 ファイルを選択したら、Portfolioはそれをスキャンしてブロックタグを確認し、適切なフィールドに情報を読み込みます。 適切な開始と終了タグが検出されない場合、データは読み込まれません。 ファイルには必ずしも3つすべてのセクションがなくてもかまいません。1つのセクションが欠如している場合「HTMLを編集」ダイアログボックスのそのブロックは処理されません。
注意: Portfolioは「%」記号を使って特殊なマクロを示すため、HTMLの一部となっている「%」記号(たとえば「width=100%」など)は扱いません。 その他のアプリケーションによって生成されたHTMLを読み込む場合は、テンプレートではHTMLソースファイルの「%」記号をすべて連続した2つの「%」記号に変換してください (例えばソースファイルで「width=100%」となっている場合は、テンプレートでは「width=100%%」にします)。
収集マクロの使用
収集マクロには、%collectionadd%、%collectionremove%、および%collectionshow%の3つがあります。 これらのマクロの動作は、アイテム、ヘッダー、フッターブロックのいずれに配置されるかによって異なります。
アイテムブロックの収集マクロ
アイテムブロックにマクロを挿入すると、部分GET要求が生成されます。
たとえば、%collectionadd%マクロを入力すると、以下のHTMLが生成されます。
.PortWeb?add&rid=75&catalog=Sample |
これを有効にするためには、マクロをある種のアンカーに挿入しなければなりません。 たとえば、以下のテンプレートコードをご覧ください。
<A HREF = "%collectionadd%&template=myCart">カートに追加</A> |
このコードから生成されたHTMLは、次のようになります。
<A HREF = ".PortWeb?add&rid=75&catalog=Sample&template=myCart">カートに追加</A> |
これは、クリックしたときに、レコードID 75をユーザーの収集アイテムに追加して「myCart」テンプレートを使いショッピングカートの内容を表示する有効なリンクとなります。 システムはショッピングカートの表示にどのテンプレートを使用するかを知らないため、「&template=myCart」パラメータを別に指定する必要があることに注意してください。 テンプレートパラメータを省略した場合、デフォルトで返される4×4のサムネールが使用されることになります。 各収集コマンドで使用するパラメータの詳細は「収集コマンド」の項を参照してください。
%collectionremove%と%collectionshow%マクロは、アイテムブロックに挿入した場合よく似た動作をします。 %CollectionRemove%マクロは、自動的にRIDとカタログパラメータを生成します。テンプレートとその他のオプションのパラメータはユーザーが提供する必要があります。 %collectionshow%マクロはカタログパラメータを自動的に生成します。この場合もテンプレートとその他のオプションのパラメータはユーザーが提供しなければなりません。
ヘッダーおよびフッターブロック内の収集マクロ
収集マクロをヘッダーとフッターブロックに挿入した場合に生成されるHTMLはそれぞれ異なります。 これは、それぞれの場所から参照できるレコードが特にないので、収集マクロは異なる意味を持つためです。
PortWebでは、これに代わりHTMLフォームブロックの開始タグが生成されます。 たとえば、ヘッダーに%collectionadd%マクロを挿入すると以下のHTMLが生成されます。
<FORM ACTION=".PortWeb?add" METHOD=POST> <INPUT TYPE=HIDDEN NAME=catalog VALUE="Sample"> |
これは一見あまり有用であるようには見えませんが、これは実は非常に便利な機能です。 PortWebは「Add」または「Remove」コマンドで複数のアイテムを処理できるため、1つのフォームで複数のレコードを送信できるようにテンプレートを設定することができます。 たとえば、以下の行をアイテムブロックに追加します。
<INPUT TYPE="checkbox" NAME="rid" VALUE=%rid%>カートに追加 |
続いて、「送信」ボタンとフォームを閉じるタグをフッターに挿入します。
<INPUT TYPE="submit" NAME="send" VALUE="選択したアイテムを追加"> <INPUT TYPE=HIDDEN NAME=template VALUE="Sample"> </FORM> |
生成されたHTMLには各アイテムの横にチェックボックスがあります。 このチェックボックスを選択して、「選択したアイテムを追加」ボタンをクリックすると、チェックマークの付いたすべてのレコードがショッピングカートに追加され、「Sample」テンプレートを使って結果が表示されます。