5.8. typolink:

はいってくる値をリンクでラップする。

これがparseFuncから使われると、$cObj->parameters-arrayはリンクパラメータ(小文字)で取り込まれる。

プロパティ:

データタイプ:

説明:

デフォルト:

extTarget

target /stdWrap

外部リンクに使用されるターゲットtarget used for external links

_top

target

target /stdWrap

内部リンクに使用されるターゲットtarget used for internal links

 

no_cache

boolean /stdWrap

リンクに"&no_cache=1"-パラメータを加える

 

useCacheHash

boolean

設定されたら、additionalParamsリストが激増され、“&cHash=ae83fd7s87”のようにurlに付加されたハッシュ文字列内で計算される。キャッシュメカニズムがこの値を見たとき、id,type,no_cache,ftu,cHash,MP 値を除いて、HTTP_GET_VARS 内の着信する値に基づくサーバー上の同じ値を計算する。着信するcHash値が計算値と一致した場合、ページはこれに基づいてキャッシュされる。

[SYS][encryptionKey]はこれをサーバーにとって固有なものでかつ予測不能なものとするために、ハッシュの中に含まれる。

 

additionalParams

string /stdWrap

これはurlの最後に付け加えられるパラメータである。これは最後のパレメータの後に挿入できる状態にあるコードでなければならない。

 

例:

'&print=1'

'&sword_list[]=word1&sword_list[]=word2'

 

アプリケーション:

searchresultからのページにリンクしている場合、これはとても便利である。探索語はレジスタキーSWORD_PARAMSに格納され、下記のように直接挿入される:

.additionalParams.data = register:SWORD_PARAMS

 

注: これは内部リンクにおいてのみ使える!

 

addQueryString

boolean

リンクの最初にQUERY_STRINGを加える。これはどんな二重パラメータのチェックも行わないことに留意! これは問題ではない(同じ名前の最後のパラメータだけ適用される)が、それでもこれが気に入らない場合は、"config.uniqueLinkVars"を有効にすること。

 

.method: GETもしくはPOSTに設定された場合、解析されたクエリ引数(GET又はPOSTデータ)が使用される。この設定は、Real URLのような拡張子を処理するURLをユーザが使用してパスの一部をクエリ引数に翻訳するような場合、便利である。

これを"POST,GET"又は"GET,POST"に設定する場合、POSTとGETデータのどちらも入手することも可能である。このシーケンスの最後のメソッドは優先権を持ち、最初のメソッドに存在する部分を上書きする。

 

.exclude: リンク(例L又はHash)から除外するクエリ引数のリスト。

 

wrap

wrap

リンクをラップする。

 

ATagBeforeWrap

boolean

設定された場合、リンクは最初に".wrap"で、その後<A>-タグでラップされる。.

 

parameter

string /stdWrap

これは->typolinkがリンクを作成するのに使用するデータである。値は切り取られ、もし空の場合は、->typolinkは影響されない入力値を戻す。

 

注: parseFuncから使用された場合、この値は以下によってインポートされるはずである:

typolink.parameter.data = parameters : allParams

 

例:

内部リンク:

整数 (51): uid = 51でページへのリンクを作成する

filerefs (fileadmin/somedir/thedoc.html): ローカルサーバー上のファイルへのリンクを作成する。

文字列 (some_alias): 別名= "some_alias"でページへのリンクを作成

 

外部リンク:

eメールアドレス (name@email.com): email-addrへのリンクを作成する。

ドメイン (www.domain.com):

 

入力は下記のように解析される:

最初に、パラメータは文字-スペースで分割される。これはより多くのパラメータを渡す方法を提供する。下の"target"を参照。

"@"が文字列の中にあれば、それはeメールである。

文字列の中にピリオド(.)があり、そしてピリオド(.)がスラッシュ(/)の前にあるかもしくはダブルスラッシュがある場合、それはURLである。

スラッシュ(/)が有る場合、それはファイルリファレンスである。Fileもしくはdirectoryがサーバー上に存在しない場合、リンクは作られていない!

 

 

入力は別名又はページIDが使える。入力が整数の場合、それはページIDであり、二つのコンマで分けられた整数の場合は、id/typeペアであり、さもなければ別名である。ページIDや別名に関しては、ジャンプ先のページの数字を示すtt_contentレコードナンバーをつけた”#”をプリペンドすることができる! (.section-propertyが存在する場合、これを無効にする)。

"234"がtt_content レコードナンバーの時、"#234"だけを挿入したら、現在のpage-idにリンクする。

注:パラメータはリンク生成を外部関数に渡すキーワードを有することができる。この表の下の例を参照!

 

ターゲット

ターゲットは通常typolinkの"extTarget"及び"target"プロパティにより定義される。しかし、空白によって区切られたパラメータの後に新しいターゲットを加えることでこのターゲットを無効にできる。このようにターゲットは第2パラメータとなる。

“Target”パラメータが“-” 文字に設定されると、関数に渡されたターゲットがないのと同じことになる。この機能で、ターゲットを設定せずにクラスを第3パラメータとして、タイトルを第4パラメータとして渡すことが可能になる。

 

一定の寸法でウィンドウに開く(JavaScript)

JavaScriptで開いたウィンドウ(with “window.open”)で、リンクを開くことが可能である。これについては、123がウィンドウの幅、456がウィンドウの高さの場合、ターゲット値を”123x456”に設定するだけである。また、追加のパラメータを、幅と高さをコロン“:”で分けて入力することで関数に明記することができる。例えば “230x450:resizable=0,location=1” とすれば、ウィンドウのサイズ調整を無効にし、ロケーションバーを有効にできる。

“JSwindow”プロパティも参照。

 

クラス

パラメータ値内を空白で区切って第3パラメータを指定する場合、これはリンクのクラス-パラメータとなる。このクラスパラメータは.ATagParams どんな値でもその前のリンクタグに挿入される。そしてこれは、このクラス値はATagParams に設定されたどんなクラス値(少なくともMSIEには)をも無効にするという意味である。“-”に設定された場合、関数に渡されたクラスはないということと同じことである。この機能で、クラスを設定することなしに、タイトルを第4パラメータとして渡すことが可能になる。

 

タイトル

タイトル属性は通常.ATagParams を通じて、もしくは直接.titleプロパティを通じて指定される。しかし、typolinkに第4パラメータとして望ましいタイトルを加えることにより(空白によって分けられたパラメータ)、この値を無効にすることができる。

 

多重パラメータの例:

関数に渡されたこの.parameter値を考察:

 

51  _blank  blueLink

 

これは、このようなリンクの近似値という結果となる:

 

<A href=”?id=51” target=”_blank”span>

 

title

string /stdWrap

A-タグのタイトルパラメータを設定。

 

JSwindow_params

string

ウィンドウを開くための規定値。この例はほぼ全ての可能な属性をリストアップしている:

status=1,menubar=1,scrollbars=1,resizable=1,location=1,directories=1,toolbar=1

 

returnLast

string

"url"に設定された場合、リンクのURLを戻す($this->lastTypoLinkUrl)

"target"に設定された場合、リンクのターゲットを戻す。

だから、この2つの場合、ラップされた値ではなく、戻されたurl又はターゲットの値を入手する!

 

section

string /stdWrap

この値が存在する場合、"#"がプリペンドされ、TYPO3の別のページのどれかの内部urlの後に置かれる。

これはあるページから別のページのセクションに直接飛ぶといったようなリンクを作成するのに使用される。

 

ATagParams

<A>-params /stdWrap

追加のパラメータ

 

例:

class=”board”

 

userFunc

function-name

これは最後マニピュレーションとして、ypolink関数に適合するリンクデータをユーザ定義の関数に渡す。

ユーザ関数(第1パラメータ)に渡された$content変数は“TYPE”、“TAG”、“url”、“targetParams”、“aTagParams”といったキーを持った配列である。

TYPEはリンクの種類を示している: mailto, url, file, page

TAGはtypolink関数から生成され用意された完全な<A>-タグである。

最後の3つはこの式の後、'TAG' 値に合体される:

 

<a href="'.$finalTagParts['url'].'"'.

           $finalTagParts['targetParams'].

           $finalTagParts['aTagParams'].'>

 

userfunction は<A>-タグを戻す。

 

[tsref:->typolink]

リンクハンドラを使う

(TYPO3 4.1に加えられた)機能を使うと、ユーザが定義するキーワード用のリンクハンドラを登録できる。例えば、”->typolink”で<link>タグを変換する典型的なbodytextフィールド内で、”<link34>”でid34のページにリンクすることができる。しかし、もし拡張子”pressrelease”を持っていて、ユーザが記憶していないどこかのページのpluginによって表示されたプレスリリースアイテムをリンクさせたいとしたらどうなるか?この機能を使うと、その拡張子でこのためのロジックを作成することが可能だ。

すなわち、リンクフィールド(->typolink1用の”parameter”値)で”pressrelease:123”と入力できる:

何らかのTypoScriptが通常この値を->typolinkコールの”parameter”属性に移動させる。” pressrelease:123”が->typolinkを”parameter”として入力すると、”pressrelease”はリンクハン ドラが関連しているキーワードであるかどうかがチェックされ、もしそうであった場合はそのハンドラはリンク作成を認められる。

キーワード“pressrelease”用のハンドラの登録は以下のようにして行われる:

$TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_content.php']['typolinkLinkHandler']['pressrelease'] = 'EXT:pressrelease/class.linkHandler.php&tx_linkHandler';

クラスファイル”pressrelease/class.linkHandler.php”には以下のように現れるクラス”tx_linkHandler”が含まれている:

class tx_linkHandler {
         function main($linktxt, $conf, $linkHandlerKeyword, $linkHandlerValue, $link_param, &$pObj) {
                 $lconf = array();
                 $lconf['useCacheHash'] = 1;
                 $lconf['parameter'] = 34;
                 $lconf['additionalParams'] = '&tx_pressrelease[showUid]='.rawurlencode($linkHandlerValue);

                 return $pObj->typoLink($linktxt, $lconf);
         }
}

この関数では、キーワードの後の値の部分はGETパラメータ”&tx_pressrelease[showUid]”の値として設定されて おり、新しい->typolinkコールの”parameter”値は”34”に設定され、これはページID34で、& tx_pressrelease[showUid]=123でコールしたときプレスリリース123を表示するようなプラグインがおかれることを前提として いる。加えて、キャッシュディスプレイを生成するために使用されるtypolink関数用の”userCacheHash”属性を見ることができる。

このオペレーションから生じる結果は以下のように現れる:

<a href="index.php?id=34&amp;tx_pressrelease[showUid]=123%3A456&amp;cHash=c0551fead6" >

リンクはRealURLでエンコードされ、->typolinkが最後のURLを生成するために使われる限りconfig.linkVarsを順守する。