階層的なメニューを生成する。
|
プロパティ: |
データタイプ: |
説明: |
デフォルト: |
|---|---|---|---|
|
(1 / 2 / 3 /...) |
menuObj |
必須! 様々なレベルでメニューアイテムをレンダリングするmenuObjを定義する。 1は第1レベル、2は第2レベル、3は第3レベル、4は....
例: temp.sidemenu = HMENU temp.sidemenu.1 = GMENU |
(no menu) |
|
entryLevel |
int |
メニューがルートラインのどのレベルでスタートするかを定義する。 デフォルトは"0"で、サイトの一番最初のメニューを提供する。 値が< 0の場合、entryLevelはルートラインの"behind"から選択される。このように、"-1"は最も外側の部分のレベルからのアイテムを持ったメニューであり、"-2"はその前のレベルであり... |
0 |
|
special |
"directory" / "list" / "updated" / "browse" / "rootline" / "keywords" / “language” |
(下記各テーブル参照) |
|
|
special.value |
list of page-uid's /stdWrap |
上記参照 |
|
|
minItems |
int |
メニュー内の最小アイテム。ページの数がこのレベルに達していない場合は、タイトル"..."及びuid=[currentpage_id]を持ったダミーページが挿入される。
注: すべてのサブメニューにも影響を及ぼす。個々に各メニューの値を設定するために、メニューオブジェクト内にプロパティを設定する(“Common properties”テーブル参照)。 |
|
|
maxItems |
int |
メニュー内の最大アイテム。これ以上のアイテムは無視される。
注: すべてのサブメニューにも影響を及ぼす。(念のため“minItems”参照) |
|
|
begin |
int +calc |
メニュー内の最初のアイテム。
例: これは結果として、最初の2つのアイテムは飛ばされ、アイテム番号3から始まるメニューとなる: begin = 3 注: すべてのサブメニューにも影響を及ぼす。(念のため“minItems”参照) |
|
|
excludeUidList |
list of int |
これは、選択命令文が行われた時、排除するページuidのリストである。コンマ区切りである。現在のページを排除するために、リストに“current”を加えてもよい。
例: これらのuid-番号を持ったページはメニュー内に存在しない!! さらに、現在のページも常に排除されている。 excludeUidList = 34,2,current |
|
|
excludeDoktypes |
list of integers |
メニューから排除するページドキュメント(doktype)のリストを入力。デフォルトで、“not in menu” (5)のページは除外されており、バックエンドユーザーとマークされているものは(6)のみをアクセスする。 |
5,6 |
|
includeNotInMenu |
boolean |
設定された場合、“Not in menu”タイプのページはメニューに含まれる。 ナンバー“5”は単純に現在のdok-typeリストから取り除かれる(これはデフォルトで“5,6”であるが、“excludeDoktypes”で変更することができる、上記参照)。 |
|
|
alwaysActivePIDlist |
list of integers |
これは、アクティブメニューアイテムとみなされ、その結果ルートラインの有無にかかわらず自動的に開かれることになるページUID番号のリストである。 |
|
|
protectLvar |
boolean / keyword |
設定された場合、メニュー内の書くページ毎に"config.sys_language_uid"で定義された言語に対するAlternative Page Languageレコード(一般的には&Lで定義される)がそのページに関して存在するかどうかをチェックする。このケースに該当せず、“Localization settings”ページが“Hide page if no translation for current language exists(現在の言語に対する翻訳が存在しない場合ページを隠す)”フラグセットを持っている場合、メニューアイテムはユーザーにエラーページを生じさせる非アクセスページにリンクすることになる。このオプションを設定すると、そのようなページに“&L=0”を加えるだけでそのような状況を回避できる。すなわち、それらは現在の言語を維持せずデフォルトの言語に切り替わるという意味である。 翻訳が要求された場合のみ("config.sys_language_uid"はゼロではない)、このチェックは実行される。
キーワード: “all” “all”が設定された時、同じチェックが実行されるが、“Hide page if no translation for current language exists”が設定されているようには見えない-翻訳が見つからない場合、常にデフォルト言語に戻る。
これらのオプションに意味を持たせるためには、“config.sys_language_mode”が“content_fallback”に設定されていない時にのみ使用されるべきである。 |
|
|
addQueryString |
string |
typolink.addQueryString参照
注: これはspecial=languageにのみ有効である。 |
|
|
if |
->if |
"if"がfalseを戻した場合、メニューは生成されない。 |
|
|
wrap |
wrap |
|
|
|
stdWrap |
->stdWrap |
|
|
[tsref:(cObject).HMENU]
temp.sidemenu = HMENU
temp.sidemenu.entryLevel = 1
temp.sidemenu.1 = TMENU
temp.sidemenu.1 {
target = page
NO.afterImg = media/bullets/dots2.gif |*||*| _
NO.afterImgTagParams = hspace="4"
NO.linkWrap = {$fontTag}
NO.ATagBeforeWrap = 1
ACT < .NO
ACT = 1
ACT.linkWrap = <b>{$fontTag}</b>
}
このプロパティは現在のページストラクチャーを厳密に反映しないメニューを作成することを可能にしており、これはむしろ”next/previous(次/前)”、”last modified(最終変更)”、”pages in a certain page(特定のページ内のページ)”等のようなページにリンクしたメニューを作成するものである。
注:このオプションを使用する時は、HMENUに.entryLevelを設定しない!また、これはメニュー内の最初のレベル用ページを選択するということに注意。menuPbjects 2+によるサブメニューは通常通り作成される。
.special.valueは常にstdWrap-プロパティを持つ!
そのプロパティは以下のテーブルに記入されている:
|
タイプ: |
説明: |
デフォルト: | ||
|---|---|---|---|---|
|
directory |
pid = 35及びpid = 56のページ全てのメニューを生成する。. 20 = HMENU 20.special = directory 20.special.value = 35, 56
.valueが設定されていない場合、デフォルトのpidは現在のページとなる。
Support for <st1:place w:st="on"><st1:placetype w:st="on">Mount</st1:placetype> <st1:placename w:st="on">Pages</st1:placename></st1:place>: Yes. |
| ||
|
list |
This will generate a menu with the two pages (uid=35 and uid=36) listed: 20 = HMENU 20.special = list 20.special.value = 35, 56
If .value is not set, the default uid is the .entryLevel uid.
Mount Pagesのサポート: ある。 |
| ||
|
updated |
リストアップされているuid's(uid=35及びuid=36)で始まるツリー内のブランチから直前にアップデートされたページのメニューを生成する。さらに、フィールド"tstamp"が使用され(デフォルトはSYS_LASTCHANGED)、ツリーの深度は2レベルとなる。また、最大8ページが表示され、この3日間以内にアップデートされたものでなければならない(3600*24*3): 20 = HMENU 20.special = updated 20.special.value = 35, 56 20.special {
mode = tstamp depth = 2 maxAge = 3600*24*3 limit = 8 }
順序付けは”mode”によって指定されたフィールドで、デフォルトで逆の順序で行われるが、メニューオブジェクト(例 GMENU、下記参照)に“alternativeSortingField”を設定するとこれをオーバーライドする。 "mode"、"depth"、"maxAge"、"limit"プロパティはspecial="updated"で使用されるのみである。 mode: pages-tableのどのフィールドを使用するか。デフォルトは"SYS_LASTCHANGED"(ページ上のレコードの最も若いtstampにページが生成された時にアップデートされたもの)、"manual"もしくは“lastUpdated”は"lastUpdated"フィールド(ページ・レコードに手動で設定)を使用し、"tstamp"はページレコードの"tstamp"-フィールドを使用する。これはレコードが変更された時自動的に設定される。"crdate"はページレコードの"crdate"-フィールドを使用する。“starttime”はスタートタイムフィールドを使用する。 ゼロ値のフィールドは選択されない。 depth: デフォルトでは(値が整数でない場合)、深度は20レベルである。範囲は1-20である。1という深度はスタートidのみを意味する。深度2はスタートid+第1レベルという意味である。注: 深度はbeginAtLevelと相対的である。 beginAtLevel: 整数。.value及び.depthに基づいて作成されたページツリーのスタートレベルを決定する。ゼロがデフォルトで、スタートidを含む。1=サブページの1行目から始まり、2=サブページの2行目から始まる。深度はこのスターティングポイントと相対的である。 maxAge: 秒数+計算。現在時マイナスこの秒数より古いアップデートの日付を持つページは決して表示されない。デフォルトは"使用されない"である。計算に+-*/を使用してもよい。 limit: メニュー内のアイテムの最大数。デフォルトは10で、最大は100である。 excludeNoSearchPages: ブール。設定された場合、"No search"とマークされたページはスペシャルメニューに含まれない。
Mount Pagesのサポート: ある。 |
| ||
|
rootline |
"rootline"(このリファレンスの上記を参照)からのページを持ったメニューを作成する。 .range = [begin-level] | [end-level] (.entryLevel for HMENUの.entryLevelを参照したのと同じ方法) .target_[0-x] targets
これは...
page.2 = HMENU page.2.special = rootline page.2.special.range = 1|-2 page.2.special.targets.3 = page page.2.1 = TMENU page.2.1.target = _top page.2.1.wrap = <HR> | <HR> page.2.1.NO {
linkWrap = | > }
... 以下のようなメニューを作成する: Page level 1 > Page level 2 > Page level 3 > Page level 4 > (このメニューはレベル1から始まり、現在のページ(-2は前のレベル)へはリンクしていない。さらに、レベル3のすべてのページはターゲットとして"page"とすべての他の"_top"を持つ)
Mount Pagesのサポート: ある。 |
| ||
|
browse |
この種のメニューは".item"プロパティからのリストによって与えられたアイテムで構築されている。リスト内の各エレメント("|"で区切り)は所定の関数で逆転されたアイテム名(list参照)か、もしくはどのページにもリンクを指定できるユーザー定義の名前となる。現在のページはサイトのルートページになれないことに注意。
Mount Pagesのサポート: ない! メインプロパティ:.items ("itemnames"の"|"区切りリスト) .[itemnames].target (ターゲット) - アイテムのオプショナル・代替ターゲット .[itemnames].uid (ページのuid) - リンク先のオプショナル・代替ページuid .[itemnames].fields.[fieldname] (文字列) – ページレコードの"fieldname"フィールドをオーバーライドする。 .items.prevnextToSection (boolean) - 設定された場合、"prev"及び"next"ナビゲーションは現在のセクションのページの終わりに来たときに、次のセクションに飛ぶ。 .value (ページ-uid) - デフォルトは現在のページidである。メニューや所定のアイテムのベースポイントとして行動するような別のページ-uidでこの値をオーバーライドしたいということはほとんどないであろう。 順序付けは”mode”によって指定されたフィールドで、デフォルトで逆の順で行われるが、メニューオブジェクトに“alternativeSortingField”を設定すると(例 GMENU、下記参照)これをオーバーライドする。
逆転のアイテムネーム: next / prev : 次のページ・前のページにリンクする。次と前のページは現在のページid(又は”value”)と同じ”pid”からくる。これは現在のページを持つメニュー内の次のアイテムである。現在のレベルとも呼ぶ。 ".prevnextToSection"が設定された場合、次・前は前のセクションの次のセクション・最後のページの最初のページにリンクする。 nextsection / prevsection : 次のセクション・前のセクションにリンクする。セクションは現在のページの親(pid)ページと同じレベルで、ページのサブページとして定義される。現在のページの親ページがサイトルートページの場合は、機能しない。 nextsection_last | prevsection_last: nextsection/prevsectionがセクションの最初のページにリンクするところで、これらは最後のページにリンクする。セクションに1ペーじしかない場合は、これは最初と最後の両方になる。現在のページの親ページがサイトのルートページの場合は、機能しない。 first / last : 現在のレベルの最初・最後のページ。現在のレベルで1ページしかない場合は、そのページが最初と最後の両方になる。 up : 現在のページの親(pid)ページにリンクする。(1レベル上) 常に使用できる。 index : 現在のページの親ページの親にリンクする(2レベル上)。そのページがルートラインの外にある場合は、使用できないこともある。
例: id=20 が現在のページの場合: 21= prev and first, 19 = next, 18 = last, 17 = up, 1=index, 10 = nextsection, 11 = nextsection_last prevsection and prevsection_lastは、id=3がサブページを持たないので、存在しない!
TypoScript ("browse"-partのみ, TMENU/GMENUも必要とする): xxx = HMENU xxx.special = browse xxx.special {
items = index|up|next|prev items.prevnextToSection = 1 index.target = _blank index.fields.title = INDEX index.uid = 8 } |
| ||
|
keywords |
現在のページでも見つかった1つ以上のキーワードのメニューを作成する。 .value = 類似のページを見つけるためのキーワードのページ。 .mode: 並べ替えのために使用するページテーブル内のフィールド。デフォルトでは"SYS_LASTCHANGED"である(ページのレコードの最も若いtstampにページが生成されたときにアップデートされたもの)。"manual"もしくは“lastUpdated”は "lastUpdated"フィールドを使用し(ページレコードで手動で設定)、"tstamp"はページレコードの"tstamp"-フィールドを使用する。これはレコードが変更されたときに自動的に設定されたものである。"crdate"はページレコードの"crdate"-フィールドを使用する。“starttime” はスタートタイムフィールドを使用する。 .entryLevel = ルートライン内でサーチが始まるところ。標準ルートラインシンタックス(-x to x) .depth, .limit, .excludeNoSearchPages, .beginAtLevel ("updated"メニュー同様) .setKeywords (/stdWrap) = コンマ区切りのリストとして定義することで、キーワードを定義できる。このプロパティが定義された場合、デフォルトをオーバーライドする。これは現在のページのキーワードである。 .keywordsField = キーワードをサーチするページテーブル内のフィールドを定義する。デフォルトではフィールドネーム“keyword”である。ここで入力したフィールドが存在する場合、チェックは行われないので、現存のフィールドを入力すること?! .keywordsField.sourceField = 一致したキーワードを取ってくる現在のページからのフィールドを定義する。デフォルトでは“keyword”である。(“.keywordsField”はサーチするためのページレコードフィールドを設定するだけであることに注意!)
Mount Pagesのサポート: ある。 |
| ||
|
language |
言語セレクターメニューを作成する。通常は、ページが翻訳される各言語に対するフラグがついたメニューとして作成され、ユーザーが何かエレメントをクリックした時、同じページidがヒットされてURL内の“&L” パラメータに変更がある。
“language”タイプが現在のページレコードに基づいたメニューアイテムを、可能であればオーバーレイした各言語の言語レコードを付けて作成する。アイテムは全て現在のページidにリンクしており、“&L”のみが変更される。
Item について: “TSFE->sys_language_uid”がエレメントとしてのsys_language uidと一致したとき、状態は“ACT”に設定される。さもなければ“NO”である。しかし、“Localization settings”ページのせいでページが利用できない場合(翻訳を無効にできる)、又はAlternative Page Languageレコードが見つからなかった場合(“.normalWhenNoLanguage”で無効化できる、下記参照)、状態は非アクティブアイテムでは“USERDEF1”、そしてアクティブアイテムには“USERDEF2”に設定される。だから、全体でデザインしなければならない状態は4つある。この場合 “USERDEF1”及び“USERDEF2”でレンダリングされるメニューアイテム上のリンクを無効化することを薦める。なぜならば、その言語のページが存在しないで、アクセスしようとしてもエラーが出されるかもしれない(サイトのコンフィギュレーションによる)という理由で無効化されるからである。
.value = メニューを構築するのに使うsys_language uidsのコンマリスト。このリスト内のエレメントの数がメニューアイテムの数を決定する。 .normalWhenNoLanguage = ブール、設定された場合、言語に関する翻訳が見つからなかった場合でも、非-無効化ボタンとして言語用のボタンをレンダリングする。
例: フラグのついた言語メニューを作成する(いくつかのラインは切れることの注意):
lib.langMenu = HMENU lib.langMenu.special = language lib.langMenu.special.value = 0,1,2 lib.langMenu.1 = GMENU lib.langMenu.1.NO { XY = [5.w]+4, [5.h]+4 backColor = white 5 = IMAGE 5.file = media/flags/flag_uk.gif || media/flags/flag_fr.gif || media/flags/flag_es.gif 5.offset = 2,2 }
lib.langMenu.1.ACT < lib.langMenu.1.NO lib.langMenu.1.ACT=1 lib.langMenu.1.ACT.backColor = black
lib.langMenu.1.USERDEF1 < lib.langMenu.1.NO lib.langMenu.1.USERDEF1=1 lib.langMenu.1.USERDEF1.5.file = media/flags/flag_uk_d.gif || media/flags/flag_fr_d.gif || media/flags/flag_es_d.gif lib.langMenu.1.USERDEF1.noLink = 1 |
| ||
|
userdefined |
メニューアイテムの配列を生成するユーザー自身の小さなPHP-スクリプトを書くことができる。 .file [resource] = インクルードするphp-ファイルのファイル名。(cObject PHP_SCRIPTと同様) .[any other key] = ユーザーの好くリー宇土に対するユーザー自身の変数。すべてユーザーのスクリプト内の配列$conf にアクセス可能である。
手引き: メニューに入れたいメニューアイテムのページレコードを持った$menuItemsArray をコールした配列を投入しなければならない。 以下のようになる:
$menuItemsArray[] = pageRow1; $menuItemsArray[] = pageRow2; $menuItemsArray[] = pageRow3; ...
“pageRow”は選択されたすべてのフィールドを持ったテーブル”pages”からのレコード(SELECT * FROM...)である 偽のページ行を作成した場合、必ず少なくとも“title” 及び“uid”フィールド変数を足すこと
注: mount-pointsで作業する場合、ページレコード内の内部フィールド“_MP_PARAM” (xxx-xxx)を設定することによって、ページについて設定しなければならないMPパラメータを設定できる。
URLsのオーバーライド: カスタムhref-値(例 "http://www.typo3.org")を設定するために内部フィールド"_OVERRIDE_HREF"も使用できる。これはどんな場合も、ページが示すページへのリンクよりも使用される。"_OVERRIDE_HREF"を使用した場合、"_OVERRIDE_TARGET"は同様にターゲット値をオーバーライドするのに使用される(下記例参照)。
その他の未使用のキー: “_ADD_GETVARS”はURL、例えば“&L=xxx”にgetパラメータを加えるのに使用できる。 “_SAFE”は何らかの理由でフィルターされないようにエレメントを保護するために使用できおる。
サブメニューの作成: 内部フィールド"_SUB_MENU"でメニューアイテムの配列を加えるだけで、簡単に次のレベルのサブメニューを作成できる(下記例参照)。
エレメントの提出について 、IFSUB、ACT、CUR、USRなどのモードアイテムとして認知されるようにエレメントを提出したい場合は、ページレコードの“ITEM_STATE”キーでこれらの値の1つを指定することで可能である。この設定は普通の状態での評価をオーバーライドする。 |
| ||
|
userfunction |
メニューについてのページレコードを持った配列を戻す(上記“userdefined”同様)クラス内のユーザー関数・メソッドをコールする。 .userFunc = 関数名 |
|
[tsref:(cObject).HMENU.special]
デフォルトではHMENUオブジェクトはTYPO3のページからメニューを作成するように設計されている。そのようなページはページレコードコンテンツで示される。通常、”title”フィールドはタイトルに使用され、”uid”フィールドはメニューのそのページへのリンクを作成するのに使用される。
しかし、HMENUとサブメニューオブジェクトはとても強力なので、そのidではTYPO3のページに適応しないリンクのメニューを作成するためにこれらのオブジェクトを使用するのには非常に役立つ。
これは、ユーザーが書いたPHP-スクリプトで構築されたメニューアイテムの配列を戻すような特別なタイプ”userdefined”で簡単に行うことができる。
まず最初に、この表は最初の2つがグラフィカルなアイテムとなる3つのレベルでメニューを作成する。
0: # ************************
1: # MENU LEFT
2: # ************************
3: lib.leftmenu.20 = HMENU
4: lib.leftmenu.20.special = userfunction
5: lib.leftmenu.20.special.userFunc = user_3dsplm_pi2->makeMenuArray
6: lib.leftmenu.20.1 = GMENU
7: lib.leftmenu.20.1.NO {
8: wrap = <tr><td>|</td></tr><tr><td height="1"></td></tr>
9: XY = 163,19
10: backColor = white
11: 10 = TEXT
12: 10.text.field = title
13: 10.text.case = upper
14: 10.fontColor = red
15: 10.fontFile = fileadmin/fonts/ARIALNB.TTF
16: 10.niceText = 1
17: 10.offset = 14,12
18: 10.fontSize = 10
19: }
20: lib.leftmenu.20.2 = GMENU
21: lib.leftmenu.20.2.wrap = | <tr><td height="4"></td></tr><tr><td height="1"></td></tr>
22: lib.leftmenu.20.2.NO {
23: wrap = <tr><td height="4"></td></tr><tr><td>|</td></tr>
24: XY = 163,16
25: backColor = white
26: 10 = TEXT
27: 10.text.field = title
28: 10.text.case = upper
29: 10.fontColor = #666666
30: 10.fontFile = fileadmin/fonts/ARIALNB.TTF
31: 10.niceText = 1
32: 10.offset = 14,12
33: 10.fontSize = 11
34: }
35: lib.leftmenu.20.2.RO < lib.leftmenu.20.2.NO
36: lib.leftmenu.20.2.RO = 1
37: lib.leftmenu.20.2.RO.backColor = #eeeeee
38: lib.leftmenu.20.2.ACT < lib.leftmenu.20.2.NO
39: lib.leftmenu.20.2.ACT = 1
40: lib.leftmenu.20.2.ACT.10.fontColor = red
41: lib.leftmenu.20.3 = TMENU
42: lib.leftmenu.20.3.NO {
43: allWrap = <tr><td>|</td></tr>
44: linkWrap (
45: <table border="0" cellpadding="0" cellspacing="0">
46: <tr>
47: <td><img src="clear.gif" width="15" height="1" /></td>
48: <td><img src="fileadmin/arrow_gray.gif" height="9" width="9" hspace="3" /></td>
49: <td>|</td>
50: </tr>
51: </table>
52: )
53: }
このメニューはウェブページ上ではこのように見える:
|
|
上記TypoScrioptコードはこのメニューを生成するが、アイテムは通常のように直接ページにリンクしていない。これは、メニュー全体がこの配列から生成されていて、TypoScriptライン4+5でコールされる関数”menuMenuArray”からもどされたからである。
1: function makeMenuArray($content,$conf) {
2: return array(
3: array(
4: 'title' => 'Contact',
5: '_OVERRIDE_HREF' => 'index.php?id=10',
6: '_SUB_MENU' => array(
7: array(
8: 'title' => 'Offices',
9: '_OVERRIDE_HREF' => 'index.php?id=11',
10: '_OVERRIDE_TARGET' => '_top',
11: 'ITEM_STATE' => 'ACT',
12: '_SUB_MENU' => array(
13: array(
14: 'title' => 'Copenhagen Office',
15: '_OVERRIDE_HREF' => 'index.php?id=11&officeId=cph',
16: ),
17: array(
18: 'title' => 'Paris Office',
19: '_OVERRIDE_HREF' => 'index.php?id=11&officeId=<st1:place w:st="on"><st1:city w:st="on">paris</st1:city></st1:place>'
20: ),
21: array(
22: 'title' => 'New York Office',
23: '_OVERRIDE_HREF' => 'http://www.newyork-office.com',
24: '_OVERRIDE_TARGET' => '_blank',
25: )
26: )
27: ),
28: array(
29: 'title' => 'Form',
30: '_OVERRIDE_HREF' => 'index.php?id=10&cmd=showform',
31: ),
32: array(
33: 'title' => 'Thank you',
34: '_OVERRIDE_HREF' => 'index.php?id=10&cmd=thankyou',
35: ),
36: ),
37: ),
38: array(
39: 'title' => 'Products',
40: '_OVERRIDE_HREF' => 'index.php?id=14',
41: )
42: );
43: }
配列がuidフィールドを全くもたず、要求された”title”と”_OVERRIDE_HREF”、及び適合するようなその他のフィールドのみを持った”偽の”ページレコードを保有することに注意。
l “Contact”と”Products”を持った第1レベルは”title”と”_OVERRIDE_TARGET”フィールドを含んでいるが、”Contact”はアイテムの類似の配列を持つ”_SUB_MENU”配列によってこれを拡張する。
l 第2レベルの第1アイテム”Offices”は”_OVERRIDE_TARGET”と呼ばれるフィールドを含む。さらに、そのアイテムは状態を”active”アイテムとしてレンダリングする”ACT”に設定する(実際のページのメニューをレンダリングしない時はそのようなものを手作業で計算しなければならない!)。
最終的にメニューアイテムの別のサブレベルもできる。