各種タグ記述について
テンプレート及び投稿画面内で用いることができるのは、テキスト・htmlタグとMODX専用のタグのみ。php文もSmartyも使えません。MODXをCMSとして活用するには、MODX専用のタグの記述が必須です。
タグの種類
- [*リソース変数*] - 投稿画面上の各入力フィールドに対応。タイトル・本文・投稿日など。
- [*テンプレート変数*] - カスタムフィールド。リソース変数と同じような使い方です。
- [(コンフィグ変数)] - サイト名など、サイト全体に関する設定値。主にグローバル設定に関連します。サイト全体で共有できる値を管理するだけならチャンクでもかまわないので、コンフィグ変数では特にサイトの機能に由来する値を管理することになっています。
- {{チャンクタグ}} - 作ったチャンクを呼び出すためのタグ。
- [[スニペットコール]] または[!スニペットコール(キャッシュなし)!] - スニペットを呼び出すためのタグ。
- [~リンクタグ~] - 任意のリソースのURLを出力するためのタグ。
- [+プレースホルダ+] - スニペットの出力を、さらに定型化したい場合に用います。サブスニペット・ミニスニペットのようなものです。
- [^ベンチマークタグ^] - ページの出力時間やSQLクエリの発行回数などを出力するためのタグ。負荷調整などに用います。
MODXの独自タグは、上記の8種類があります。最低限必要なのはリソース変数のみ。無理せず、必要に応じてポイントを絞って習得しましょう。学習曲線の緩やかさはMODXの大きな特長です。
タグはどこにどう記述するか
これら8種類のタグは、テンプレート・投稿画面のどちらでも全く同じように用いることができます。
また、スニペットコールやリンクタグのように、パラメータを与えて呼び出すタイプのタグでは、タグ記述の内部に他のタグを入れ子で記述することができます。
[~[*id*]~]
たとえば上記のように記述すれば、これを記述したページのURLを出力できます。この場合は投稿画面内よりはテンプレート側に記述するほうが実用的です。eFormなど、formタグと関係するスニペットでもよく用いられます。
[[タイトル取得?id={{キャンペーン記事のID}}]]
スニペットコールであれば、上記のような記述ができます。この例では、「タイトル取得」という名前のスニペットのパラメータとして「キャンペーン記事のID」というチャンクの値を与えています。簡易チュートリアルにも類似ノウハウを記述していますので、参考にしてください。
Jotで実装するコメント欄や掲示板では、安全に配慮してスニペットコールが展開されないようになっています。
意外と重要なリンクタグ
MODXは、サイト構造の制御ルールをテンプレートに盛り込むタイプのCMSではありません。基本的に、各ページ間のリンクは手作業で張ります。その際、各ページのURLを直接貼り付けるのではなく、リンクタグを用いましょう。
リンクタグを用いると、URLの管理をMODX本体に任せることができます。ページのURLを変更すると、リンクタグが出力するURLも追随して変わります。
条件分岐はできるのか
Smartyなどの一般的なテンプレートエンジンにおいて常識となっている条件分岐記述(if文)は、MODXでは使えません。PHPプログラムであるスニペット内で行う必要があります。スニペット自体の記述は手続き的なものは特に必要なく、数行程度ですむことも多いと思います。
これにより、見通しのよいテンプレート構成を運用維持できます。管理担当者が変わってもスムーズに引き継ぐことができます。以下、スニペットの記述例を紹介します。
条件分岐が必要な場合の具体例
具体的には下記のようなスニペットを作ります。
<?php
if($modx->documentIdentifier == $modx->config['site_start'])
{
$body_tag = '<body style="background-color:green;">';
}
else
{
$body_tag = '<body>';
}
return $body_tag;
?>
上記は、「もしトップページであれば背景色を緑色にする」という条件分岐を目的としたスニペットのコードです。PHPそのままですが、WordPressに慣れている人ならこれくらいは平気でしょう。これを、テンプレート中の「<body>」タグの代わりにスニペットコールとして記述します。
(※省略)
</head>
<?php
if($modx->documentIdentifier == $modx->config['site_start'])
{
echo '<body style="background-color:green;">';
}
else
{
echo '<body>';
}
?>
<h1>[*pagetitle*]</h1>
(※省略)
もしMODXのテンプレート内でPHP文を直接書けたとしたら、上記のようなイメージになるでしょう。WordPressやDrupalに慣れている人なら、このほうが分かりやすいかもしれませんが、目を慣らせば、ちょっとした違いであることが理解できることと思います。
少し脱線になりますが、上記の $modx->config['site_start'] というのは、[(site_start)] というコンフィグ変数のPHPコードとしての表現です。同様に、リソース変数やチャンクもPHPコード内に記述することができます。MODXのタグは、どこにでも書けるのです。PHPコード内に書く時だけ、書式が少し変わるということです。そうしないとPHP構文エラーになりますので。
タグ記述に用いることができる文字
チャンクやスニペットは、それらのパーツ名そのものが呼び出しタグになります。たとえば「ヘッダ画像」というチャンク名であれば {{ヘッダ画像}} というチャンクタグで呼び出すことができます。
全角文字を自由に用いることができます。半角スペースやクォートなども用いることができます。
{{header_image}}
というような呼び出しよりは、
{{ヘッダ画像}}
のほうが分かりやすいです。分かりやすいように記述してください。
{{正月の三が日だけ有効なヘッダ画像。江ノ島越しの富士山です}}
なんてのも、もちろんアリです。MODXは海外発のCMSですが、ちゃんと作ってありますのでご安心ください。
キャッシュ制御について
キャッシュ制御も、タグ記述の一環として説明できます。
リソース変数やチャンク、リンクタグなどは、単純にデータベースに問い合わせて値を引っ張ってくるだけなので、たいして負荷はありません。スニペットは実体がPHPプログラムなので、処理内容によってはかなり重くなることがあります。もちろんそれはPHPプログラミングの問題であって、MODXの問題ではありません。
どうしても重くなってしまう処理は仕方がないので、一度目の処理だけは負荷をこらえて出力を得て、二度目以降はこの出力内容をまるごと記憶したものをサッと出してしまうのがキャッシュの考え方です。
[[スニペット]]
このように記述すれば、そのスニペットの処理はキャッシュされて、二度目以降のアクセスでは軽快に値のみを出力します。
[!スニペット!]
こう記述した場合、キャッシュせずに、アクセスのたびごとに処理を行ないます。「ただいま何分何秒」のような、リアルタイムな情報が必要な場合は、このように記述してキャッシュを回避します。
このようなブロック単位(スニペット単位)のキャッシュ制御は、一般的なCMSでは難しいことが多いですが、MODXでは簡単に書き分けることができます。









