4章 条件

4.1. 条件参照

一般注意事項:

値は通常比較の前に空白部分を削られる。
2つのオペレータを使って複数の条件を結合することができる: && (and), || (or)
もう1つの方法として”&&”や” ||”の代わりに“AND”や”OR”を使うこともできる。ANDオペレータはORよりも常に高い優先権を持っている。もしオペレータが何も指定されていなければ、デフォルトでORとなる。

この条件は、ビジターがウィンドウズで(Macではなく)インターネットエクスプローラーでウェブサイトを開いたときに一致する。

[browser = msie] && [system = win]

これはインターネットエクスプローラーかネットスケープと一致する。ネットスケープの場合、バージョンは4以上でなければならない。

[browser = msie] || [browser = netscape] && [version => 4]

Browser(ブラウザ)

シンタックス:

[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(バージョン)

シンタックス:

[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(システム)

シンタックス:

[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(デバイス)

シンタックス:

[device= device1, device2]

値と比較:

デバイス:

識別表示:

HandHeld

pda

WAP phones

wap

Grabbers:

grabber

Indexing robots:

robot

値は文字列であり、これらの文字列のうちの1つがデバイスのタイプと等しければ一致する。

Useragent(ユーザエージェント)

シンタックス:

[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-エージェント:

以下のものは知られている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(言語)

シンタックス:

[language = lang1, lang2, ...]

比較:

値はPHPからのgetenv(“HTTP_ACCEPT_LANGUAGE”)の値と正確に一致しなければならない。あるいは、もし値が”*”(例えば、”*en-us*”)でラップされていたら、HTTP_ACCEPT_LANGUAGE文字列の中に見つかるすべての言語を分割し、その値を文字列のそれらの部分のどれかに一致させようとする。

IP

シンタックス:

[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(ホストネーム)

シンタックス:

[hostname = hostname1, hostname2, ...]

比較:

値はPHPによって検索されたgetenv(“REMOTE_ADDR”)の完全な限定ホストネームと比較される。

値は認められている*-wildcardと一致するようなドメイン名のコンマ-リストだが、文字列の一部とはなれないので、完全なホストネームでなければならない(例えば、myhost.*.com => 正, myhost.*domain.com => 誤)

hour(時間)

シンタックス:

[hour = hour1, >hour2, <hour3, ...]

比較:

浮動小数点で表される値はサーバーの現在の時間(24時表記)と比較される。

オペレーター:

機能:

[nothing]

正確な一致を要求する

時間は値よりも大きくなければならない

時間は値よりも小さくなければならない

minute(分)

上記“時間”を参照。同じシンタックスである。

シンタックス:

[minute = ...]

比較:

一時間のうちの分、0-59

dayofweek(曜日)

上記“時間”を参照。同じシンタックスである。

シンタックス:

[dayofweek = ...]

比較:

曜日、日曜で始まるものは0で、土曜日は6になる

dayofmonth(日)

上記“時間”を参照。同じシンタックスである。

シンタックス:

[dayofmonth = ...]

比較:

日付、1-31

month(月)

上記“時間”を参照。同じシンタックスである。

シンタックス:

[month = ...]

比較:

月、1月は1で、12月は12

usergroup(ユーザーグループ)

シンタックス:

[usergroup = group1-uid, group2-uid, ...]

比較:

grouplistが空でなければ(グローバル変数”gr_list”)、比較はtrueを戻すだけである。

値はgrouplistの中に存在するか、”*”でなければならないことになる。

例:

次はすべてのログインに一致する。

[usergroup = *]

次はuid’s 1と/もしくは2を持ったグループのユーザーメンバーからのログインと一致する:

[usergroup = 1,2]

loginUser(ログインユーザー)

シンタックス:

 

[loginUser = fe_users-uid, fe_users-uid, ...]

比較:

fe_userでのログインuidに一致する。何かのユーザを選択するための*wildcardを含む上記’usergroup’のように作動する。

例:

次は何かのログインと一致する([usergroup=*]の代わりにこれを使ってユーザがログインした時に一致させること!):

[loginUser = *]

treeLevel(ツリーレベル)

シンタックス:

[treeLevel = levelnumber, levelnumber, ...]

比較:

これは、rootLineの最後の要素が”treeLevel”のデータの1つに応じたレベルにあるかどうかをチェックする。Level = 0はウェブサイトの”ルート“である。Level = 1は最初のmenuenである。

例:

次は、もし参照ページがレベル0(基本)もしくはレベル2にある時、テンプレートで何かを変更する

[treeLevel = 0,2]

PIDinRootline

シンタックス:

[PIDinRootline = pages-uid, pages-uid, ...]

比較:

これは”treeLevel”のデータの1つがrootlineのPID(pages-uid)であるかどうかをチェックする。

例:

次は、もし参照ページが34ページ又は36ページのサブページである場合、テンプレートで何かを変更する。

[PIDinRootline = 34,36]

PIDupinRootline

シンタックス:

[PIDupinRootline = pages-uid, pages-uid, ...]

比較:

現在のpage-uidがチェックから除外されるということを除いて、PIDinRootlineと同じことを行う。

compatVersion

シンタックス:

[compatVersion = x.y.z]

比較:

最小の互換性バージョンを要求する。このバージョンは必ずしもTYPO3バージョンと同じである必要性はない。それはInstall ToolのUpgrade Wizardで変更できる設定可能な値である。

“compatVersion”は、ユーザが新しいデフォルト設定をしたいがTYPO3の旧バージョンへの後方への互換性も維持したいときに、特に有用である。

globalVars:

シンタックス:

[globalVar=   var1=value,  var2<value2, var3>value3, ...]

比較:

浮動小数点で表された値は上記変数”var1”と比較されます。

オペレーター:

機能:

[nothing]

正確な一致を要求する

変数は値よりも大きくなければならない

変数は値よりも小さくなければならない

globalString:

シンタックス:

[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とも一致する。

globalVar及びglobalStringに関する重要な注意:

グローバル配列やオブジェクトからの値を、変数名を”|”(垂直線)で区切ることで使用することができる。

例:グローバル変数$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:

シンタックス:

[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)]