[Declarative Menus] メニューの宣言

Declarative menus are used to add new or customize default navigation elements in displayed portal pages. These PSML declarations are part of the page and folder elements. As with other PSML elements, effective menu declarations available for a given page are those that are explicity defined in the page along with all defined in parent folders. For this reason, global site menus are defined in the PSML associated with the site root folder. Menu definitions in a specific page or folder override menus with the same name found in parent folders.

メニューの宣言は、表示されているポータルページに新しいナビゲーション要素を追加したり、デフォルトのものをカスタマイズしたりするために使われます。これらの PSML 宣言は、ページ 要素と フォルダ 要素の一部分です。他の PSML 要素と同様に、メニュー宣言は、親フォルダで定義された全てに加えて、ページ内で明示的に定義されるものが有効となります。このため、グローバルなサイトのメニューは、サイトのルートフォルダに関連づけられている PSML ファイル内で定義されます。特定のページやフォルダのメニューの定義は、親フォルダで定義されている同じ名前のメニューを上書きします。

Portal layout decorators access page menu declarations by name while rendering portal content. Menus are used to create dynamic navigation panes, portal page tabs, bread crumb links, and pull downs. The Portal Site Component is responsible for fleshing out the dynamic menu definition options with page specific PSML elements from the site. For instance, a global menu declaration would typically be involved in the following sequence of events while a portal page is being composed:

  1. The portal layout decorator would request a menu definition by name,
  2. the definition would be inherited by the current page and located in the root folder PSML,
  3. the Portal Site Component would interpret the menu definition in the context of the current page and populate page, folder, and link menu options,
  4. the decorator would display the menu rendering titles and text from the menu definition itself and the computed menu options into portal navigation content.

ポータルのレイアウトデコレータは、ポータルのコンテンツを描画しているときに、名前でページメニューの宣言にアクセスします。メニューは、動的なナビゲーションペインや、ポータルページのタブや、パンくずリスト (訳注:よくページ上部に表示されるような、現在のページのウェブサイト内での階層構造をリストアップしたもの。例えば「ホーム > 商品 > デジタルカメラ」のように、どういうルートをたどって今のページに至ったかを示す。) や、プルダウンメニューを作成するのに使われます。ポータルサイトコンポーネントは、サイトのページ固有の PSML エレメントを持つ動的なメニュー定義の選択肢を実際に形成することを担当しています。例えば、グローバルなメニュー定義は、一般的に、ポータルページが構成されている間、次のような順序でイベントに関係します。

  1. ポータルレイアウトデコレータは、名前でメニュー定義の要求を行います。
  2. 定義は、現在のページに継承され、ルートフォルダの PSML に設定されます。
  3. ポータルサイトコンポーネントは、現在のページのコンテキスト内のメニュー定義を解釈し、ページフォルダやメニューの選択肢のリンクを設置します。
  4. デコレータは、メニュー定義自身と算出されたメニューの選択肢を元に、ポータルのナビゲーションコンテンツにタイトルとテキストを描画し、メニューを表示します。

There are default global menu declarations supported internally by the Portal Site Component that do not need to be explicitly defined in any page or folder PSML elements of the site:

  • pages: relative pages menu used to define the page tabs above the portal.
  • breadcrumbs: paths to page used to provide history links below the page tabs.
  • navigations: relative subfolders and root level links menu used to define the navigation pane beside the portal.
  • back: parent folder menu used to define the single "back" link above the portal page tabs.
As one would expect, these built in menu definitions can be overridden by declaring menus in the site PSML with the same name.

ポータルサイトコンポーネントによって、内部的にサポートされた共通のメニュー定義が存在し、サイトのページやフォルダの PSML 要素に明示的には定義の必要がありません。

  • pages: ポータル上のページタブを定義するのに使われる、相対的なページメニュー。
  • breadcrumbs: ページタブ以下にリンクの履歴を提供するのに使われる、ページへのパス。
  • navigations: ポータルの横のナビゲーションパネルを定義するのに使われる、相対サブフォルダとルートレベルのリンクメニュー
  • back: ポータルページタブ上の、以前のページへ 1 つ戻るためのリンクを定義するのに使われる、親フォルダのメニュー。
メニュー定義内で構築されるこれらは、期待どおり、サイトの PSML 内で同じ名前で宣言されるメニューに上書きされます。

[Menu Definition] メニューの定義

The <menu> element defines a menu to be used by the layout decorators or a nested menu within another menu. There are many valid attributes for the menu element:

<menu> 要素は、レイアウトデコレータもしくは他のメニュー内の階層化されたメニューによって使われるメニューを定義します。menu 要素には、たくさんの有効な属性が存在します。

AttributeDescription
nameIdentifies menu name for retrieval from template code and/or menu reference. This attribute is required for top level nodes and ignored for nested menus.
optionsSpecifies root document path for this menu if deep inclusion of documents and folders is specified by this menu. This attribute may also define document paths that specify page, folder, or link menu options. Multiple option paths can be specified as a comma separated list of paths and/or regular expression patterns. Relative paths are interpreted as relative to the current page. Special patterns, '~' or '@', can be used to reference the current page.
depthSpecifies deep inclusion of documents from option folders, (depth < 0 specifies infinite depth). Menu options are created to represent each visible page or link in the site; folders are converted into nested menus constrained by this setting.
pathsBoolean attribute to control the inclusion of ordered path options from root folder to the specified options. This setting is used to generate "history" or "bread crumb" menus.
regexpA boolean attribute the specifies whether wild card/regular expression processing be performed on options values. File system command line regular expression syntax is supported.
profileSpecified name of Profile Locator to be used when evaluating option values. This attribute also sets the default profile value for options and nested menus. Specifying '*' forces the acceptance of all Profile Locator names; this can be used to override parent menu selects a profile name.
orderComma separated list of regexp patterns matched against list or regular expression document path values to determine order of matched options. This attribute will be applied as a default options value for any options elements, but is not used to reorder multiple options children matches. If not specified, multiple options are included in the order returned by the underlying folder document orderings. Option paths not matched by this attribute are appended after ordered matches.
skinOptional decorator defined layout hint for the menu. This attribute is also used as the default skin value for options and nested menus. This hint is not currently used by Jetspeed2 decorators.
属性説明
nameテンプレートコードおよび(または)メニュー参照からの検索のためのメニュー名を指定します。この属性は、トップレベルのノードで必須で、階層化されたメニューでは無視されます。
optionsメニューの指定に、ドキュメントとフォルダの深い階層が存在する場合、メニューのためのルートドキュメントのパスを指定します。この属性は、ページ、フォルダ、メニューの選択肢のリンクの指定を行うドキュメントパスも定義します。カンマで区切ったパスおよび (または) 正規表現のパターンを、複数のオプションパスとして指定可能です。相対パスは、現在のページからの相対パスとして解釈されます。「~」や「@」といった特別なパターンを、現在のページを参照するために使うことができます。
depthオプションフォルダからのドキュメントの深さを指定します (0 以下の深さの指定は無限大を表す)。メニューの選択肢は、それぞれの可視ページを表示するか、サイトへのリンクを行うために作成されます。フォルダはこの設定によって階層化したメニューに変換されます。
pathsルートフォルダから指定された選択肢への順序付きのパスオプションを含むかどうかを指定する真偽値。この設定は「履歴」もしくは「パンくずリスト」メニューを生成するのに使います。
regexp選択肢の値としてワイルドカードや正規表現が使われるかどうかを指定する真偽属性。ファイルシステムのコマンドラインの正規表現をサポートします。
profileオプションの値を評価する際に使われるプロファイルロケータの名前を指定します。この属性は、オプションと階層化したメニューのためのデフォルトのプロファイルの値も設定します。「*」の指定は、全てのプロファイルロケータの名前を受け入れます。これは、親メニューが選択したプロファイル名を上書きするのに使うことができます。
orderマッチする選択肢の順序を判断するための、カンマで区切られたマッチするパターンの正規表現のリスト、もしくは正規表現のドキュメントパスの値。この属性は、どの選択肢の要素に対してもデフォルトの選択肢の値として適用されます。しかし、複数の選択肢の子供へのマッチを再度順序づけることはありません。もし指定されない場合、複数の選択肢は、含まれるフォルダドキュメントのものとして返される順序に含まれます。この属性にマッチしない選択肢のパスは、順序づけられたものの後に追加されます。
skinメニューのためのレイアウトのヒントを定義する省略可能なデコレータ。この属性は、選択肢や階層化したメニューのデフォルトスキンの値としても使われます。このヒントは、現時点では Jetspeed 2 のデコレータでは使われていません。

The <menu> element contains a number of other menu definition PSML elements. With the exception of the title and metadata elements, the relative order of these elements determines the order that the layout decorators present them:

<menu> 要素は、多数の他のメニュー定義の PSML 要素を含みます。タイトルとメタデータ要素を除いて、これらの要素の相対的な順序は、レイアウトデコレータがそれらを提示する順序を決定します。

ElementDescription
title?Simple element text specifies default locale-independent title for the menu. The title of the menu is considered its long description and is used as rollover text in some decorators if the short title is available for the menu text. If not specified, the name of the menu will be used.
short-title?Simple element text specifies default locale-independent short title for the menu. The short title, if available, is used as menu text in some decorators. If not specified, the title text is used.
metadata*Optionally specifies additional locale-specific titles and short titles.
options*This ordered menu element specifies content elements for this menu definition.
separator*An ordered menu element used to specify text lines to be included inline in this menu definition.
menu*Another ordered menu element used to define a nested menu contained in this menu definition.
include*Specifies a menu to nest within or options from a another menu to be included in this menu definition. The name of the menu to include is the text of this ordered menu element.
exclude*Specifies options and nested menus from another menu to be excluded from this menu definition. The name of the menu with elements to exclude is the text of this ordered menu element.
要素説明
title?メニュー用のデフォルトのロケール非依存なタイトルを指定する単純な要素。メニューのタイトルは、その長い記述とみなされます。そして、もしメニュー用の短いタイトルが利用可能である場合、デコレータによってはロールオーバー用のテキストとして使う場合があります。もし指定されない場合、メニューの名前が使われます。
short-title?メニュー用のデフォルトのロケール非依存な短いタイトル。短いタイトルは、もし利用可能である場合、デコレータによってはメニューのテキストとして使う場合があります。もし指定されない場合、タイトルのテキストが使われます。
metadata*追加のロケール特有のタイトルと短いタイトルを指定します(省略可)。
options*この順序付きのメニュー要素は、このメニュー定義のためのコンテンツ要素を指定します。
separator*このメニュー定義内で、インラインで含まれるテキスト行を指定するために使われる、順序付きのメニュー要素。
menu*このメニュー定義に含まれる、階層化されたメニューを定義するのに使われる、他の順序付きメニュー要素。
include*このメニュー定義に含める、他のメニューの階層化したメニュー、もしくは選択肢を指定します。含めるメニューの名前はこの順序付きのメニュー要素のテキストです。
exclude*このメニュー定義から除外する、他のメニューの選択肢と階層化したメニューを指定します。除外するための要素に含まれるメニューの名前は、この順序付きのメニュー要素のテキストです。

Examples:

例:

<menu name="simple">
    <options>/some-top-page.psml,/custom/some-other-page.psml</options>
</menu>
<menu name="simple">
    <options>/some-top-page.psml,/custom/some-other-page.psml</options>
</menu>
<menu name="top-2-levels" options="/" depth="2" skin="dhtml-pull-down"/>
<menu name="top-2-levels" options="/" depth="2" skin="dhtml-pull-down"/>
<menu name="top-role-pages" regexp="true" options="/*" profile="roles"/>
<menu name="top-role-pages" regexp="true" options="/*" profile="roles"/>
<menu name="top-custom">
    <title>Top Menu</title>
    <metadata name="title" xml:lang="fr">Haut</metadata>
    <options regexp="true" profile="groups">/group-pages/*</options>
    <menu options="/" profile="page">
        <separator>
            <text>-- Top Pages --</text>
            <title>Top Pages</title>
        </separator>
        <options regexp="true">/*</options>
        <separator>
            <title>Custom Pages</title>
        </separator>
        <options depth="2">/custom-folder/</options>
    </menu>
    <exclude>top-role-pages</exclude>
    <separator>More Top Pages</separator>
    <include nest="true">top-role-pages</include>
</menu>
<menu name="top-custom">
    <title>Top Menu</title>
    <metadata name="title" xml:lang="fr">Haut</metadata>
    <options regexp="true" profile="groups">/group-pages/*</options>
    <menu options="/" profile="page">
        <separator>
            <text>-- Top Pages --</text>
            <title>Top Pages</title>
        </separator>
        <options regexp="true">/*</options>
        <separator>
            <title>Custom Pages</title>
        </separator>
        <options depth="2">/custom-folder/</options>
    </menu>
    <exclude>top-role-pages</exclude>
    <separator>More Top Pages</separator>
    <include nest="true">top-role-pages</include>
</menu>

The definitions for the default global menu declarations supported internally by the Portal Site Component:

デフォルトの共通メニュー宣言のための定義は、内部的にポータルサイトコンポーネントによってサポートされます。

<menu name="pages" regexp="true" options="*.psml"/>
<menu name="pages" regexp="true" options="*.psml"/>
<menu name="breadcrumbs" options="~" paths="true"/>
<menu name="breadcrumbs" options="~" paths="true"/>
<menu name="navigations">
  <separator>Folders</separator>
  <options regexp="true">./*/</options>
  <include>page-navigations</include>
  <separator>Additional Links</separator>
  <options regexp="true">/*.link</options>
</menu>
<menu name="navigations">
  <separator>Folders</separator>
  <options regexp="true">./*/</options>
  <include>page-navigations</include>
  <separator>Additional Links</separator>
  <options regexp="true">/*.link</options>
</menu>
<menu name="back" options="../"/>
<menu name="back" options="../"/>

Note that the separator text of these definitions is localized internally.

これらの定義のセパレータのテキストは、内部的に変換されることに注意してください。

[Menu Options Definition] メニューの選択肢の定義

The <options> element defines a single or multiple options within a menu. The text of this simple element specifies document paths that yield page, folder, or link menu options. Multiple option paths can be specified as a comma separated list of paths and/or regular expression patterns. Relative paths are interpreted as relative to the current page. Special patterns, '~' or '@', can be used to reference the current page. This element shares many attributes in common with the menu element:

<options> 要素は、メニュー内に単一または複数の選択肢を定義します。この単純な要素の文字列は、ページ、もしくはフォルダ、もしくはリンクのメニューの選択肢を作るドキュメントのパスを指定します。複数の選択肢のパスを、パスおよび (もしくは) 正規表現パターンをカンマで区切ったリストとして指定することも可能です。相対パスは、現在のページからの相対パスとして解釈されます。「~」や「@」といった特別なパターンを、現在のページを参照するために使うことができます。この要素は、メニュー要素とたくさんの属性を共有します。

AttributeDescription
depthSpecifies deep inclusion of documents from option folders, (depth < 0 specifies infinite depth). Menu options are created to represent each visible page or link in the site; folders are converted into nested menus constrained by this setting.
pathsBoolean attribute to control the inclusion of ordered path options from root folder to the specified options. This setting is used to generate "history" or "bread crumb" menus.
regexpA boolean attribute the specifies whether wild card/regular expression processing be performed on options values. File system command line regular expression syntax is supported.
profileSpecified name of Profile Locator to be used when evaluating option values. This attribute also sets the default profile value for options and nested menus. Specifying '*' forces the acceptance of all Profile Locator names; this can be used to override parent menu selects a profile name.
orderComma separated list of regexp patterns matched against list or regular expression document path values to determine order of matched options. This attribute will be applied as a default options value for any options elements, but is not used to reorder multiple options children matches. If not specified, multiple options are included in the order returned by the underlying folder document orderings. Option paths not matched by this attribute are appended after ordered matches.
skinOptional decorator defined layout hint for the menu options. This hint is not currently used by Jetspeed2 decorators.
属性説明
depth選択肢のフォルダからのドキュメントの深さを指定します (0 以下の深さは無限大を表します)。メニューの選択肢は、サイトへのそれぞれの可視ページまたはリンクを表示するように作成されます。フォルダは、この設定によって階層化したメニューに変換されます。
pathsルートフォルダから指定された選択肢への順序付きのパスの選択肢を含むかどうかを指定する真偽値。この設定は「履歴」もしくは「パンくずリスト」メニューを生成するのに使います。
regexp選択肢の値としてワイルドカードや正規表現が使われるかどうかを指定する真偽属性。ファイルシステムのコマンドラインの正規表現をサポートします。
profile選択肢の値を評価する際に使われるプロファイルロケータの名前を指定します。この属性は、選択肢と階層化したメニューのためのデフォルトのプロファイルの値も設定します。「*」の指定は、全てのプロファイルロケータの名前を受け入れます。これは、親メニューが選択したプロファイル名を上書きするのに使うことができます。
orderマッチする選択肢の順序を判断するための、カンマで区切られたマッチするパターンの正規表現のリスト、もしくは正規表現のドキュメントパスの値。この属性は、どの選択肢の要素に対してもデフォルトの選択肢の値として適用されます。しかし、複数の選択肢の子供へのマッチを再度順序づけることはありません。もし指定されない場合、複数の選択肢は、含まれるフォルダドキュメントの順番で返される順序に含まれます。この属性にマッチしない選択肢のパスは、順序づけられたものの後に追加されます。
skinメニューの選択肢のレイアウトのヒントを定義するデコレータ(省略可)。このヒントは、現時点では Jetspeed 2 のデコレータでは使われていません。

Example:

例:

<menu>
    ...
    <options regexp="true" order="*.psml,*.link">/some-top-page.psml,/custom/some-other-page.psml,/*.link</options>
    ...
</menu>

    [Menu Separator Definition] メニューのセパレータの定義

    The <separator> element defines a separator to be included in a menu. The separator will be included only if options or nested menus appear below this element within a menu definition. The text of the separator can be specified in the contained text of this element or in the text menu definition element. There is only one attribute accepted by the separator element:

    <separator> 要素は、メニュー に含めるセパレータを定義します。セパレータは、選択肢 もしくは階層化したメニューが、メニューの定義内のこの要素以下に現れた場合のみ含まれます。セパレータのテキストは、この要素内のテキスト、もしくはテキストメニュー定義の要素内で指定することが可能です。セパレータ要素に記述可能な属性は 1 つしかありません。

    AttributeDescription
    skinOptional decorator defined layout hint for the menu separator. This hint is not currently used by Jetspeed2 decorators.
    属性説明
    skinメニューセパレータのレイアウトのヒントを定義する省略可能なデコレータ。このヒントは、現時点では Jetspeed 2 のデコレータでは使われていません。

    The <separator> element contains a number of other menu definition PSML elements:

    <separator> 要素は、たくさんの他のメニュー定義の PSML 要素を含みます。

    ElementDescription
    title?Simple element text specifies default locale-independent title for the separator. The title of the separator is considered its long description and is used as rollover text in some decorators if the separator text is available.
    text?Simple element text specifies default locale-independent text for the separator. The required separator text, whether specified by this attribute or as the contained text of the separator element, is the text to be inserted in the menu by the layout decorator.
    metadata*Optionally specifies additional locale-specific titles and separator text.
    要素説明
    title?メニュー用のデフォルトのロケール非依存なタイトルを指定する単純な要素。セパレータのタイトルは、その長い記述とみなされます。そして、もしセパレータのテキストが利用可能である場合、デコレータによってはロールオーバー用のテキストとして使う場合があります。
    text?メニュー用のデフォルトのロケール非依存なテキストを指定する単純な要素。セパレータのテキストは必須で、この属性によって指定されようと、セパレータ要素内のテキストとして指定されようと、レイアウトデコレータがメニュー内に挿入するためのテキストとなります。
    metadata*ロケール特有の追加のタイトルとセパレータテキスト(省略可)。

    Examples:

    例:

    <menu>
        ...
        <separator>-------------</separator>
        ...
        <separator>
            <text>-- Top 10 Pages --</text>
            <metadata name="text" xml:lang="fr">Haut Pages</metadata>
            <title>Top 10 pages as voted by the Jetspeed2 users!</title>
        </separator>
        ...
    </menu>
    
    <menu>
        ...
        <separator>-------------</separator>
        ...
        <separator>
            <text>-- Top 10 Pages --</text>
            <metadata name="text" xml:lang="fr">Haut Pages</metadata>
            <title>Top 10 pages as voted by the Jetspeed2 users!</title>
        </separator>
        ...
    </menu>
    

    [Menu Include Definition] メニューをインクルードするための定義

    The <include> element includes options or nested menus from another menu. The name of the menu to include is specified as the text value of this element. There is only one valid attribute for the include element:

    <include> 要素は、選択肢 または、他のメニューの階層化した メニュー を含みます。含めるメニューの名前は、このエレメントのテキスト値として指定します。この要素に含めることのできる有効な属性は 1 つしかありません。

    AttributeDescription
    nestBoolean flag that controls whether the specified menu is to be nested. If this attribute is set to 'true', the included menu will be nested as a submenu; otherewise, all options and nested menus from the specified menu will be inserted inline into this menu.
    属性説明
    nest指定したメニューが、階層化するためのものかどうかを制御する真偽値。もしこの属性に 'true' が指定された場合、含めるメニューはサブメニューとして階層化されます。そうでないのなら、全ての選択肢と指定したメニューの階層化したメニューは、このメニュー内にインラインで挿入されます。

    Examples:

    例:

    <menu>
        ...
        <include nest="true">navigations</include>
        ...
    </menu>
    
    <menu>
        ...
        <include nest="true">navigations</include>
        ...
    </menu>
    

    [Menu Exclude Definition] メニューの除外を行うための定義

    The <exclude> element excludes options or nested menus from another menu. This option is used primarily to remove menu options that already appear on the portal page in another menu from this menu. Matching options or menus will be excluded only if they appear above this element within a menu definition. The name of the menu to include is specified as the text value of this simple element.

    <exclude> 要素は、選択肢 もしくは、他のメニューの階層化した メニュー を除外します。このオプションは主に、このメニューから、ポータルページ内の、他のメニューに既に表示されているメニューの選択肢を消去するために使われます。一致する選択肢またはメニューがメニュー定義内のこの要素より上に表示されている場合は、除外されます。除外するメニューの名前は、この単純な要素のテキスト値として指定します。

    Examples:

    例:

    <menu>
        ...
        <exclude>pages</exclude>
        ...
    </menu>
    
    <menu>
        ...
        <exclude>pages</exclude>
        ...
    </menu>
    

    [Page Layout Decorators] ページレイアウトデコレータ

    The page layout decorators request menus from the Portal Site Component when the page is being rendered in the Jetspeed2 pipeline. The decorators expect certain menus to be provided by the PSML declarations. Before custom menus can be displayed in the portal, the decorators need to be modified to render the custom menu. Here is an example taken from a Velocity layout decorator header.vm file:

    ページレイアウトデコレータは、ページが Jetspeed 2 パイプラインで描画されるとき、ポータルサイトコンポーネントからメニューを要求します。デコレータは、メニューが PSML で定義されることを期待します。カスタムメニューがポータルに表示される前に、デコレータは、カスタムメニューの描画を変更する必要があります。以下に、Velocity レイアウトデコレータの header.vm ファイルから抜き出した例を示します。

    ...
    #set($pagesStandardMenu = $site.getMenu("pages"))
    #if(!$pagesStandardMenu.empty)
      <div class="tabs">
    #includeTabsNavigation($pagesStandardMenu $LEFT_TO_RIGHT)
      </div>
    #end
    ...
    
    ...
    #set($pagesStandardMenu = $site.getMenu("pages"))
    #if(!$pagesStandardMenu.empty)
      <div class="tabs">
    #includeTabsNavigation($pagesStandardMenu $LEFT_TO_RIGHT)
      </div>
    #end
    ...
    

    This code block renders the standard pages tabs menu within a portal page. The Portal Site Component is exposed as the $site Velocity context variable. The test for an empty menu definition is designed to ensure that empty menus are not rendered into the page content. Finally, a decorator macro is executed to expand the menu content. This approach is taken in general to support the rendering of nested menus with recursive invocations of the macro. In this case, the decorator is expecting only page options. Here is the macro implementation used to render the pages tabs menu:

    このコードは、ポータルページ内の標準的なページのタブメニューを描画します。ポータルサイトコンポーネントは Velocity のコンテキスト変数 $site として表れます。空のメニュー定義のための判断は、空のメニューがページコンテンツ内に描画されないことを保証するために設計されています。最後に、デコレータマクロが、メニューコンテンツを展開するために実行されます。一般に、再帰的なマクロの起動で階層化したメニューを描画することをサポートするために、このアプローチを取ります。この場合、デコレータはページオプションだけを期待します。以下に、ページのタブメニューを描画するのに使われるマクロ実装を示します。

    #macro (includeTabsNavigation $_menu $_orientation)
      <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        #foreach($element in $_menu.elements.iterator())
          #if($element.elementType == "option")
            #set($tabTitle = $element.getTitle($preferedLocale))
            #set($tabName = $element.getShortTitle($preferedLocale))
            #if($_orientation == $LEFT_TO_RIGHT)
              #if($element.isSelected($site))
                <td class="LTabLeft" nowrap="true">&nbsp;</td>
                <td class="LTab" align="center" valign="middle" nowrap="true" title="$!tabTitle">${tabName}</td>
                <td class="LTabRight"  nowrap="true">&nbsp;</td>
              #else
                #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url))
                <td class="LTabLeftLow"  nowrap="true">&nbsp;</td>
                <td class="LTabLow" align="center" valign="middle" nowrap="true" title="$!tabTitle"><a href="$tabUrl">${tabName}</a></td>
                <td class="LTabRightLow"  nowrap="true">&nbsp;</td>
              #end
            #end
          #end
        #end
      </tr>
      </table>
    #end
    
    #macro (includeTabsNavigation $_menu $_orientation)
      <table border="0" cellpadding="0" cellspacing="0">
      <tr>
        #foreach($element in $_menu.elements.iterator())
          #if($element.elementType == "option")
            #set($tabTitle = $element.getTitle($preferedLocale))
            #set($tabName = $element.getShortTitle($preferedLocale))
            #if($_orientation == $LEFT_TO_RIGHT)
              #if($element.isSelected($site))
                <td class="LTabLeft" nowrap="true">&nbsp;</td>
                <td class="LTab" align="center" valign="middle" nowrap="true" title="$!tabTitle">${tabName}</td>
                <td class="LTabRight"  nowrap="true">&nbsp;</td>
              #else
                #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url))
                <td class="LTabLeftLow"  nowrap="true">&nbsp;</td>
                <td class="LTabLow" align="center" valign="middle" nowrap="true" title="$!tabTitle"><a href="$tabUrl">${tabName}</a></td>
                <td class="LTabRightLow"  nowrap="true">&nbsp;</td>
              #end
            #end
          #end
        #end
      </tr>
      </table>
    #end
    

    This macro iterates over the computed page menu options supplied by the Portal Site Component, rendering a series of table data HTML elements that make up each displayed tab. The whole menu is rendered as a HTML table with a single row.

    このマクロは、ポータルサイトコンポーネントによって提供される、処理されたページメニューの選択肢全てに渡って反復されます。これは、表示されるタブそれぞれを作るための HTML 要素のテーブルデータを描画します。メニュー全体は、単一の行の HTML テーブルとして描画されます。

    The declarative menu Portal Site Component objects exposed to the layout decorators are documented in the Jetspeed API. Here is a list of the primary interfaces that make up this interface:

    Please refer to the javadocs for these interfaces and sample Velocity decorators for more information.

    ポータルサイトコンポーネントオブジェクトがレイアウトデコーレータに表示する、宣言型のメニューは、Jetspeed API の文書に記述されます。以下に、このインタフェースを作るためのプライマリのインタフェースのリストを以下に挙げます。

    更に情報が欲しい場合は、これらのインタフェースの javadoc とサンプルの Velocity デコレータを参照してください。

    Jetspeed2 provides many sample decorators including those that will render tabs, navigation panes with nested submenus, history breadcrumb links, and even DHTML JSCookMenu nested pulldown menus... all from the declarative menu elements documented here.

    Jetspeed 2 は、タブや階層化したサブメニューを持つナビゲーションペインや、閲覧履歴のパンくずリストリンクや、階層化したプルダウンメニューの DHTML JSCookMenu を描画する宣言型のメニュー要素を含んだ、多くのサンプルのデコレータを提供しています。

    [Portal Site Component] ポータルサイトコンポーネント

    The Jetspeed2 Portal Site Component has two closely related responsibilities:

    1. Map portal request urls from a user to PSML page or folder elements in the site, and
    2. construct site navigational menus and their options that reflect what is available to the user from the site.
    At first glance, these functions seem relatively simple: searching within and traversing the PSML site definition. However, once the complexities of the Profiler aggregation and Security Constraints filtering are taken into account, the mapping is no longer trivial.

    Jetspeed 2 のポータルサイトコンポーネントには、 2 つの密接に関係した役割があります。

    1. ユーザからのポータルのリクエスト URL を、サイト内の PSML ページ もしくは フォルダ 要素にマップします。そして、
    2. サイトでユーザが利用可能なものを反映した、サイトのナビゲーションメニューと、メニューの選択肢を構築します。
    一見、これらの機能は、PSML サイト定義 を検索し、走査するだけの、比較的シンプルなものであるように見えます。しかし、一度 プロファイラ の集約とセキュリティ制約 のフィルタリングの複雑さが採り入れられると、マッピングはもはや単純ではなくなります。

    It is important to note that menu options are matched against the Portal Site Component mapped view of the PSML site. The document paths specified in the menu elements are not the physical paths used to navigate the PSML folders and pages. Instead, paths that mirror portal requests are used to select PSML elements to include as menu options. In this manner, profiling and security are automatically factored into the menu option population... rather as if running the request url mapping in reverse.

    メニューの選択肢は、PSML サイトのポータルサイトコンポーネントがマッチさせるビューと一致していることに注意することが重要です。メニュー要素の指定するドキュメントのパスは、PSML フォルダやページを指し示すために使われる物理パスではありません。代わりに、ポータルリクエストを反映するパスは、メニューの選択肢として含める PSML 要素を選択するのに使われます。このように、プロファイリングとセキュリティは、あたかも実行中のリクエスト URL を逆にマップするかのように、メニューの選択肢の集団に自動的に含まれます。