[*テンプレート変数*]
テンプレート変数とは
テンプレート変数は、投稿画面に追加したカスタム入力フィールドを変数の入れ物と見立てて、テンプレートなどを通じてその値に自由にアクセスする仕組みです。
テンプレート変数を作成すると、投稿画面に入力フィールドが追加されます。
テンプレート変数は、管理画面の「エレメント」→「エレメント管理」の「テンプレート変数」タブで作成・管理することができます。
テンプレート変数の使い方・実例
<html>
<head>
<title>[*pagetitle*]</title>
<meta name="description" content="[*description*]" />
<meta name="keywords" content="[*キーワード*]" />
</head>
<body>
<h1>[*longtitle*]</h1>
<div>[*content*]</div>
</body>
</html>
[*pagetitle*] などのリソース変数と同じ書式です。
スニペット・プラグイン内から呼び出す方法
$string = $modx->getField('テンプレート変数名');
MODX Evolution1.0.9J以降であれば、上記の方法を用いることができます。
$array = $modx->getTemplateVarOutput('テンプレート変数名');
$string = $array['テンプレート変数名'];
1.0.9Jよりも古い場合は上記の方法を用いることができます。
1.0.12J以降で使える方法
新しいシステムイベント「OnLoadDocumentObject 」が1.0.12Jで追加されました。このシステムイベントを使って変数を上書きまたは新規追加することができます。
$modx->documentObject['template'] = 3;
たとえば上記のような一行プラグインを作成すると、IDが3のテンプレートに変更することができます。
$modx->documentObject['url'] = 'xxxxx';
上記のようなプラグインを作ると [*url*]という仮想のリソース変数を作成できます。
documentObjectとしてのテンプレート変数の構造
0 - $tv['name'] - テンプレート変数名
1 - $tv['value'] - 値
2 - $tv['display'] - プロセッサ
3 - $tv['display_params'] - プロセッサのパラメータ
4 - $tv['type'] - 入力フォーム(text・チェックボックス・テキストエリアなど)
カスタムプロセッサ
Note: [+value+] is only special place holder.
1) chunk
@CHUNK: チャンク名
<img src="[+value+]" alt="[*pagetitle*]-[(site_name)]" />
または
<a href="[+value+]">
<img src="phpThumb.php?src=[+value+]&w=200" alt="[*pagetitle*]-[(site_name)]" />
</a>
2) include
@INCLUDE: PHPファイル名
<?php
$value ='[*pagetitle*]-[(site_name)]';
?>
This method only rewrites $value. The array and the object can be passed. In this correspondence, this method is the most important.
3) file
@FILE: hoge.txt
<img src="[+value+]" alt="[*pagetitle*]-[(site_name)]" />
4) eval
@EVAL: return '<img src="' . $value . '" alt="[*pagetitle*]" />';
5) direct
<img src="[+value+]" alt="[*pagetitle*]" />
*Important
In case of emptily $value
Output is nothing.
入力フォーム
カスタム入力フォームで使用できるプレースホルダ
<input type="text"
id="tv[+field_id+]"
name="tv[+field_id+]"
value="[+field_value+]"
[+field_style+]
onchange="documentDirty=true;"
/><br />
field_id : [+field_id+]<br />
field_type : [+field_type+]<br />
default_text : [+default_text+]<br />
field_value : [+field_value+]<br />
field_style : [+field_style+]<br />
site_name : [(site_name)]<br />
pagetitle : [*pagetitle*]<br />
chunk : {{chunk}}<br />
snippet : [[snippet]
※name="tv[+field_id+]"とvalue="[+field_value+]"の指定は必須です。