値は通常比較の前に空白部分を削られる。
2つのオペレータを使って複数の条件を結合することができる: && (and), || (or)
もう1つの方法として”&&”や” ||”の代わりに“AND”や”OR”を使うこともできる。ANDオペレータはORよりも常に高い優先権を持っている。もしオペレータが何も指定されていなければ、デフォルトでORとなる。
この条件は、ビジターがウィンドウズで(Macではなく)インターネットエクスプローラーでウェブサイトを開いたときに一致する。
[browser = msie] && [system = win]
これはインターネットエクスプローラーかネットスケープと一致する。ネットスケープの場合、バージョンは4以上でなければならない。
[browser = msie] || [browser = netscape] && [version => 4]
[browser = browser1,browser2,...]
|
ブラウザ: |
識別表示: |
|---|---|
|
Microsoft Internet Explorer |
msie |
|
Netscape Communicator |
netscape |
|
Lynx |
lynx |
|
Opera |
opera |
|
PHP fopen |
php |
|
AvantGo (www.avantgo.com) |
avantgo |
|
Adobe Acrobat WebCapture |
acrobat |
|
IBrowse (amiga-browser) |
ibrowse |
|
Teleport Pro |
teleport |
|
?? (if "mozilla" is not in useragent) |
unknown |
各値はstrstr()内の($browsername.$browserversion, 例 "netscape4.72")と比較される。
だから、値が”netscape”もしくはただの”net”であれば、すべてのネットスケープのブラウザは一致する。
リストの中のどれかの値が現在のブラウザと一致していたら、条件はtrueを戻す。
これは、ネットスケープとopera-browser(オペラブラウザ)に一致する。
[browser = netscape, opera]
[version = value1, >value2, =value3, <value4, ...]
値は、小数点の記号としての”.”を用いた浮動小数点数である。
その値は3つのオペレータが前につけられる:
|
オペレーター: |
機能: |
|---|---|
|
[nothing] |
値は文字列としてバージョンの始めの部分でなければならない。これは、もしバージョンが“4.72”で値が“4”もしくは“4.7”であれば一致しているとういうことである。しかし“4.73”は一致しない。 シンタックスからの例: "value1" |
|
= |
値は正確に一致しなければならない。バージョン"4.72" は"4.72"とうい値にしか一致しない。 |
|
> |
バージョンは値よりも大きくなければならない。 |
|
< |
バージョンは値よりも小さくなければならない。 |
これは厳密に”4.03”のブラウザに一致する。
[version= =4.03]
これはすべての4つのブラウザとネットスケープの3つのブラウザに一致する。
[version= >4][browser= netscape3]
[system= system1,system2]
|
システム: |
識別表示: |
|---|---|
|
Linux |
linux |
|
SGI / IRIX |
unix_sgi |
|
SunOS |
unix_sun |
|
HP-UX |
unix_hp |
|
Macintosh |
mac |
|
Windows 3.11 |
win311 |
|
Windows NT |
winNT |
|
Windows 95 |
win95 |
|
Windows 98 |
win98 |
|
Amiga |
amiga |
値は文字列であり、これらの文字列のうちの1つがシステム識別表示の最初の部分であれば、一致する。
これはウィンドウズとマックシステムのみに一致する。
[system= win,mac]
[device= device1, device2]
|
デバイス: |
識別表示: |
|---|---|
|
HandHeld |
pda |
|
WAP phones |
wap |
|
Grabbers: |
grabber |
|
Indexing robots: |
robot |
値は文字列であり、これらの文字列のうちの1つがデバイスのタイプと等しければ一致する。
[useragent= agent]
これはGetenv(“HTTP_USER_AGENT”)からのユーザエージェント文字列上での直接的な一致である。
値agentの初め と/または 終わりに”*”を付けることでこのワイルドカードと一致させるという選択肢がある。
もしHTTP_USER_AGENTが”Mozilla/4.0(compatible;Lotus-Notes/5.0;Windows-NT)”であれば、これは一致する:
[useragent = Mozilla/4.0 (compatible; Lotus-Notes/5.0; Windows-NT)]
これはまた以下のものとも一致する:
[useragent = *Lotus-Notes*]
…しかしこれは次のようなユーザエージェントとも一致する:
”Lotus-Notes/4.5(Windows-NT)”
ユーザエージェントの簡単なリストと適正な一致は以下の表の通り:
|
HTTP_USER_AGENT: |
エージェント内容: |
一致条件: |
|---|---|---|
|
Nokia7110/1.0+(04.77) |
Nokia 7110 WAP phone |
[useragent= Nokia7110*] |
|
Lotus-Notes/4.5 ( Windows-NT ) |
Lotus-Notes browser |
[useragent= Lotus-Notes*] |
|
Mozilla/3.0 (compatible; AvantGo 3.2) |
AvantGo browser |
[useragent= *AvantGo*] |
|
Mozilla/3.0 (compatible; WebCapture 1.0; Auto; Windows) |
Adobe Acrobat 4.0 |
[useragent= *WebCapture |
以下のものは知られているWAPエージェントの一部である:
|
HTTP_USER_AGENT |
HTTP_USER_AGENT (続き) |
|---|---|
|
ALAV UP/4.0.7 Alcatel-BE3/1.0 UP/4.0.6c AUR PALM WAPPER Device V1.12 EricssonR320/R1A fetchpage.cgi/0.53 Java1.1.8 Java1.2.2 m-crawler/1.0 WAP Materna-WAPPreview/1.1.3 MC218 2.0 WAP1.1 Mitsu/1.1.A MOT-CB/0.0.19 UP/4.0.5j MOT-CB/0.0.21 UP/4.0.5m Nokia-WAP-Toolkit/1.2 Nokia-WAP-Toolkit/1.3beta Nokia7110/1.0 () Nokia7110/1.0 (04.67) Nokia7110/1.0 (04.67) Nokia7110/1.0 (04.69) Nokia7110/1.0 (04.70) Nokia7110/1.0 (04.71) Nokia7110/1.0 (04.73) Nokia7110/1.0 (04.74) Nokia7110/1.0 (04.76) Nokia7110/1.0 (04.77) Nokia7110/1.0 (04.80) Nokia7110/1.0 (30.05) Nokia7110/1.0 |
PLM's WapBrowser QWAPPER/1.0 R380 2.0 WAP1.1 SIE-IC35/1.0 SIE-P35/1.0 UP/4.1.2a SIE-P35/1.0 UP/4.1.2a UP.Browser/3.01-IG01 UP.Browser/3.01-QC31 UP.Browser/3.02-MC01 UP.Browser/3.02-SY01 UP.Browser/3.1-UPG1 UP.Browser/4.1.2a-XXXX UPG1 UP/4.0.7 Wapalizer/1.0 Wapalizer/1.1 WapIDE-SDK/2.0; (R320s (Arial)) WAPJAG Virtual WAP WAPJAG Virtual WAP WAPman Version 1.1 beta:Build W2000020401 WAPman Version 1.1 Waptor 1.0 WapView 0.00 WapView 0.20371 WapView 0.28 WapView 0.37 WapView 0.46 WapView 0.47 WinWAP 2.2 WML 1.1 wmlb YourWap/0.91 YourWap/1.16 Zetor |
[language = lang1, lang2, ...]
値はPHPからのgetenv(“HTTP_ACCEPT_LANGUAGE”)の値と正確に一致しなければならない。あるいは、もし値が”*”(例えば、”*en-us*”)でラップされていたら、HTTP_ACCEPT_LANGUAGE文字列の中に見つかるすべての言語を分割し、その値を文字列のそれらの部分のどれかに一致させようとする。
[IP = ipaddress1, ipaddress2, ...]
値はPHPからのgetenv(“REMOTE_ADDR”)と比較される。
値の中の部分の1つの代わりに”*”を入れることができます。また、最初の1つ、又は2つ、又は3つの部分の記入をして、テストすることもできる。
以下の例は”123”で始まるIP-アドレスのどれかと一致する。
[IP = 123.*.*.*]
又は
[IP = 123.*.*.*]
以下の例は”123”又は”192.168.1.34”で終わるIP-アドレスのどれかと一致する。
[IP = *.*.*.123][IP = 192.168.1.34]
[hostname = hostname1, hostname2, ...]
値はPHPによって検索されたgetenv(“REMOTE_ADDR”)の完全な限定ホストネームと比較される。
値は認められている*-wildcardと一致するようなドメイン名のコンマ-リストだが、文字列の一部とはなれないので、完全なホストネームでなければならない(例えば、myhost.*.com => 正, myhost.*domain.com => 誤)
[hour = hour1, >hour2, <hour3, ...]
浮動小数点で表される値はサーバーの現在の時間(24時表記)と比較される。
|
オペレーター: |
機能: |
|---|---|
|
[nothing] |
正確な一致を要求する |
|
> |
時間は値よりも大きくなければならない |
|
< |
時間は値よりも小さくなければならない |
上記“時間”を参照。同じシンタックスである。
[minute = ...]
一時間のうちの分、0-59
上記“時間”を参照。同じシンタックスである。
[dayofweek = ...]
曜日、日曜で始まるものは0で、土曜日は6になる
上記“時間”を参照。同じシンタックスである。
[dayofmonth = ...]
日付、1-31
上記“時間”を参照。同じシンタックスである。
[month = ...]
月、1月は1で、12月は12
[usergroup = group1-uid, group2-uid, ...]
grouplistが空でなければ(グローバル変数”gr_list”)、比較はtrueを戻すだけである。
値はgrouplistの中に存在するか、”*”でなければならないことになる。
次はすべてのログインに一致する。
[usergroup = *]
次はuid’s 1と/もしくは2を持ったグループのユーザーメンバーからのログインと一致する:
[usergroup = 1,2]
[loginUser = fe_users-uid, fe_users-uid, ...]
fe_userでのログインuidに一致する。何かのユーザを選択するための*wildcardを含む上記’usergroup’のように作動する。
次は何かのログインと一致する([usergroup=*]の代わりにこれを使ってユーザがログインした時に一致させること!):
[loginUser = *]
[treeLevel = levelnumber, levelnumber, ...]
これは、rootLineの最後の要素が”treeLevel”のデータの1つに応じたレベルにあるかどうかをチェックする。Level = 0はウェブサイトの”ルート“である。Level = 1は最初のmenuenである。
次は、もし参照ページがレベル0(基本)もしくはレベル2にある時、テンプレートで何かを変更する
[treeLevel = 0,2]
[PIDinRootline = pages-uid, pages-uid, ...]
これは”treeLevel”のデータの1つがrootlineのPID(pages-uid)であるかどうかをチェックする。
次は、もし参照ページが34ページ又は36ページのサブページである場合、テンプレートで何かを変更する。
[PIDinRootline = 34,36]
[PIDupinRootline = pages-uid, pages-uid, ...]
現在のpage-uidがチェックから除外されるということを除いて、PIDinRootlineと同じことを行う。
[compatVersion = x.y.z]
最小の互換性バージョンを要求する。このバージョンは必ずしもTYPO3バージョンと同じである必要性はない。それはInstall ToolのUpgrade Wizardで変更できる設定可能な値である。
“compatVersion”は、ユーザが新しいデフォルト設定をしたいがTYPO3の旧バージョンへの後方への互換性も維持したいときに、特に有用である。
[globalVar= var1=value, var2<value2, var3>value3, ...]
浮動小数点で表された値は上記変数”var1”と比較されます。
|
オペレーター: |
機能: |
|---|---|
|
[nothing] |
正確な一致を要求する |
|
> |
変数は値よりも大きくなければならない |
|
< |
変数は値よりも小さくなければならない |
[globalString = var1=value, var2= *value2, var3= *value3*, ...]
これはグローバル文字列での直接的な一致である。
値にワイルドカードとして”*”を付けるか、PCREスタイルの正規表現(”/”でラップしなければならない)を使うといった選択肢がある。
もしHTTP_HOSTがwww.typo3.comであれば、これは以下と一致する:
[globalString = HTTP_HOST=www.typo3.com]
これはまた以下とも一致する:
[globalString = HTTP_HOST= *typo3.com]
…しかしこれはまた”demo.typo3.com”のようなHTTP_HOSTとも一致する。
グローバル配列やオブジェクトからの値を、変数名を”|”(垂直線)で区切ることで使用することができる。
例:グローバル変数$HTTP_POST_VARS["key"]["levels"]は
"HTTP_POST_VARS|key|levels"によって検索される。
またユーザのスクリプトをphp.ini-optimizedの設定に従ってプログラミングすることが推奨されることに留意すること。詳細はそのファイル(ユーザが所有する)を参照。
このことに注意するということは、getenv()によってHTTP_HOSTのような値を得る、すなわちt3lib_div::GPvar()でGET/POSTを検索するということを意味する。最終的にTSFEオブジェクトからの多くの値は有効である。”globalVar”や”globalString”条件との比較用にこれらの値を入手するために、そのvarnaに個々に”IENV”/”ENV:”、”GP:”、”TSFE:”、”LIT:”のいずれかを前につけること。さらに、区切り文字”|”は配列と/もしくはオブジェクト内のキーを分割するのに使うことができる。”LIT”は”literal”を意味し、”:”の後の文字列は削除され(”|”や他のもので分割されることなく)値として戻される。
注:”IENV:”接頭語を使用することは、システム上独立したサーバー/環境変数を得るために高く推奨される。基本的に、これはt3lib_div::getlndpEnv()関数をコールし値を戻す。”ENV:”で、すべてのシステムで必ずしも同じであるとは限らないgetenv()から未加工の出力を得ることができる!
これは”…&print=1”のようなurlと一致する:
[globalVar = GP:print > 0]
これは”192.168.”ではじまるremote-addrと一致する:
[globalString = IENV:REMOTE_ADDR = 192.168.*]
これは10より高い数字で始まるpage-idと一致する:
[globalVar = TSFE:id > 10]
これは”Layout 1”に設定されたレイアウトフィールドを持つページと一致する:
[globalVar = TSFE:page|layout = 1]
これはusernameが”test”になっているユーザと一致する:
[globalString = TSFE:fe_user|user|username = test]
もし定数{$constant_to_turnSomethingOn}が”1”であれば、これは一致する:
[globalVar = LIT:1 = {$constant_to_turnSomethingOn}]
[userFunc = user_match(checkLocalIP)]
これは最初のパラメータ”checkLocalIP”で関数”user_match”をコールする。この関数を書く。チェックするものを決める。関数結果はtrueもしくはfalseで評価される。
この関数をユーザのlocalconf.phpファイルに入れる:
function user_match($cmd) {
switch($cmd) {
case "checkLocalIP":
if (strstr(getenv("REMOTE_ADDR"),"192.168")) {
return true;
}
break;
case "checkSomethingElse":
// ....
break;
}
}
この条件はリモートアドレスが”192.168”を含んでいたら、trueを戻す。これはユーザの関数が見つけ出したものである。
[userFunc = user_match(checkLocalIP)]