テンプレート変数の基本的な使い方
2007.03.29
MODxの各ドキュメントには、「作成日」「編集日」「公開日」「停止日」と言う4つの日付設定があります。
作成日はこのドキュメントを始めて作成した日で、編集日は編集する毎に自動的に更新され、何時更新したかが分かるようになります。
公開日・停止日はその日が来たら自動的に公開する、停止すると言うようなものです。
この4つ以外に、ドキュメント毎に自由に決められる表示用の日付と言う項目を作って見たいと思います。
「リソース」→「リソース管理」→「テンプレート変数」→「テンプレート変数の作成」を開きます。(図1)
名前はとりあえず「DispDate」にしておきます。
入力タイプを「Date」にすると、MODxの内臓機能でカレンダーから簡単に選択できるようになります。

右側の変なアイコンは@バインド機能が使用できるよというマークです。
@バインドについて詳しくは「テンプレート変数(template-var)」で説明しています。
アクセスできるテンプレートを選択します。(図2)

テンプレート変数を作成したら、図2で選択したテンプレート上の表示させたい場所にテンプレート変数を呼び出す為のMODxタグを書き込みます。
<p class="DispDate">[*DispDate*]</p>
新しいドキュメントを作成して、テンプレートは図2で許可したものを選択します。
コンテンツのテキストエリアの下に、利用可能なテンプレート変数が出てくるので、とりあえず今日の日付をクリックしてセットします。(図3)

テンプレートで記述した場所に、図1で設定したフォーマットで日付が表示されています。(図4)

値があるときだけコンテナを表示させる
上記の例では、DispDateを設定していない場合、
<p class="DispDate"></p>
と言うような空のタグが作成されてしまいます。
フォーマットにチャンクが使えないか試したんですけど、どうも使えないようなので以下のような方法で値がある時だけコンテナを表示するようにしてみます。
DistDate用スニペットを作成
<?php
// テンプレート変数フォーマット用のライブラリ
$baspath = $modx->getConfig('base_path')."manager/includes";
include_once $baspath."/tmplvars.format.inc.php";
include_once $baspath."/tmplvars.commands.inc.php";
// テンプレート変数を取得
$content = $modx->getTemplateVar('DispDate');
// 値があれば表示する
if ($content['value']) {
// フォーマッターに通す
$content = getTVDisplayFormat($content['name'], $content['value'], $content['type'], $content['display_params']);
// チャンクを拾う
$chunk = $modx->getChunk('DispDate');
// プレースホルダを変換して出力
echo preg_replace('#\[\+DispDate\+\]#', $content, $chunk);
}
?>
DistDate用チャンクを作成
<p class="DispDate">[+DispDate+]</p>
といっても、簡易でチャンク指定とか出来ないから、チャンク使わずにスニペット内に直接HTML書いた方が手間がない。
テンプレートの方の記述は、テンプレート変数ではなくスニペットを呼ぶようにする。
{{DispDate}}