[*リソース変数*]
MODXのテンプレートワークの基本は、まずはリソース変数から。リソース変数は、タイトル・本文・投稿日など、投稿画面上の各入力フィールドに対応し、その値をそのまま出力します。全部で37種類ありますが、[*pagetitle*]と[*content*]の2つを覚えておけば、通常のサイト作りは間に合います。
リソース変数を記述できる場所
場合によっては入れ子記述になってしまう可能性があるため、注意してください。たとえば本文(content)の中に [*content*]を記述するとループ状態になります。事故防止のため、この場合は10回まで繰り返して終了します。
リソース変数は、下記のエレメント内で記述できます。
- テンプレート
- 投稿画面内のtextフィールドやtextarea全て
- チャンク
- スニペット
- プラグイン
スニペットやプラグインはPHPコードなので、[*リソース変数名*]ではなく $modx->documentObject['リソース変数名'] と記述します。書式が多少違う程度で、どこでも同じように呼び出して使えるというのがポイントです。
リソース変数のデータ形式
リソース変数のデータ形式として、以下の5種類があります。
- 文字列(自由記述可)
- 文字列(複数の値から選択するのみ)
- unixtime形式
- 整数値 (IDなど)
- 0|1 (0か1か)
このうち、テンプレート・チャンク・投稿画面内に記述してそのまま利用できるタイプのリソース変数は、文字列形式のものだけです。他のリソース変数は、何らかの処理を通す必要があります。全部で37種類あるリソース変数のうち、文字列形式のリソース変数は7種類だけですので、デザインやhtmlコーディングを担当する人は、7種類のリソース変数を覚えておけばデザインワーク的にはおおかた足りると言えます。
実際には、他のデータ形式を持つリソース変数も、スニペットやリンクタグのパラメータとして用いることが多いため、必要に応じて習得する必要があります。タグ記述を習得するためのコツとして、データ形式の違いを意識するとよいでしょう。
管理画面とリソース変数の関係

▲投稿画面とリソース変数の関係。まずは[*pagetitle*]と[*content*]を覚えましょう

▲投稿画面とリソース変数の関係。他にも投稿者や削除日時、リソースIDなど、投稿画面では確認できないリソース変数が存在します。

▲リソースツリーとリソース変数の関係。この2つのリソース変数は管理画面内の随所で用いられます
リソース変数一覧
主なリソース変数
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*id*] | リソースID | 主にスニペットコールやリンクタグのパラメータとして用います |
| [*content*] | 本文 | 通常のページを作る場合、必須。(※記述しなくてもエラーにはならない) |
| [*pagetitle*] | リソース名 | ページのタイトルとして全般的に用いられることが多いです |
| [*longtitle*] | タイトル | 管理に用いるページタイトルとコンテンツに用いるタイトルを区別したい場合などに用います |
| [*menutitle*] | メニュー タイトル | ナビゲーション用のタイトルとして、短い文字列が必要な場合に。 |
| [*alias*] | エイリアス | フレンドリーURL設定が有効な場合、URL表現に用いられます。 |
| [*description*] | 説明 description | metaタグのdescription属性として用います。この場合はhtmlタグが混じらないよう気をつけてください。 |
| [*introtext*] | 要約(序説) | 序文・リード文などを配置するタイプのコンテンツに用います |
日付に関するリソース変数
UNIXTIME形式です。2012年05月18日08時13分であれば「1337296437」という値になります。このままではコンテンツとして用いることができないため、PHxプラグインなどを用いるとよいでしょう。
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*createdon*] | 作成日時 | ページを最初に作成した日時。この値は管理画面操作では変更できません。 |
| [*publishedon*] | 公開日時 | ページが実際に公開された日時。いったん非公開に戻して再公開すると値が更新されます。 |
| [*editedon*] | 更新日時 | ページを更新した直近の日時。更新するたびに値が変わります。 |
| [*pub_date*] | 公開予定日時 | 公開を予定している日時。過去の日時をセットすると公開されます。 |
| [*unpub_date*] | 公開終了日時 | 公開終了を予定している日時。非公開に戻った後もこの値は変わりません。 |
| [*deletedon*] | 削除日時 | ページを削除した日時。復活可能な状態で残っています。 |
PHxを用いて日付を表示する方法
[*createdon:date=`%Y年%m月%d日`*]
管理メンバーに関するリソース変数
管理画面のログインユーザのID値が入ります。そのままではコンテンツに用いることができないため、PHxプラグインなどを用いてメンバー名やメンバーのメールアドレスなどに変換するとよいでしょう。
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*createdby*] | 作成メンバー | このリソースを最初に作成したメンバーのID。 |
| [*publishedby*] | 公開メンバー | 公開操作を行なったメンバーのID。 |
| [*editedby*] | 編集メンバー | このリソースを最も直近で編集したメンバーのID。 |
| [*deletedby*] | 削除メンバー | そのページを削除したメンバーのID。復活できる状態のリソースのみが対象で、完全に消去した場合はデータはありません。 |
PHxを用いてメンバー情報を表示する方法
[*createdby:userinfo=`fullname`*]
コンテンツ構造に関する情報
整数値
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*template*] | テンプレート | テンプレートID |
| [*parent*] | 親リソース | 親リソースのID |
| [*menuindex*] | メニューオーダー | Wayfinderスニペットなどを用いて実装するナビゲーション上での並び順。Dittoでも用いられます。 |
| [*hidemenu*] | メニューに表示 | メニューに表示するかどうか。 |
コンテンツの状態に関する情報
「0」または「1」です。
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*published*] | 公開ステータス | このページが公開されているかどうか。 |
| [*deleted*] | 削除の状態 | 削除されているかどうかを示します。復活可能な状態で残っている必要があり、完全に消去された場合はアクセスできません。 |
| [*cacheable*] | キャッシュの 有効無効 | このページ全体のキャッシュ状態。 |
| [*searchable*] | 検索対象に 含める | MODX本体はサイト内を検索する機能を持っていません。 |
| [*donthit*] | ログ記録 の対象 | MODX本体にはアクセスログを記録する機能はありません。 |
コンテンツの種別に関する情報
文字列が入ります。
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*contentType*] | コンテントタイプ | 通常はtext/htmlです。application/rss+xmlなど自由に設定できます。 |
| [*content_dispo*] | コンテント ディスポジション | 通常はブラウザのウィンドウ内にデータを出力しますが、ダウンロードダイアログを通じてデータをファイルとして渡すこともできます。 |
アクセス権限に関する情報
「0」または「1」を返します。
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*privateweb*] | リソース グループ | ウェブユーザグループと紐付いたリソースグループに属しているかどうか。 |
| [*privatemgr*] | リソース グループ | 管理メンバーグループと紐付いたリソースグループに属しているかどうか。 |
その他の変数
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*type*] | リソースタイプ | このリソースが通常のリソースかウェブリンクであるかを示します。 |
| [*isfolder*] | コンテナ属性 | コンテナ属性の有無を示します。コンテナ属性を持たない場合、そのリソースはサブリソースを持っていないことを意味します。 |
| [*link_attributes*] | リンク属性 | 他のリソースからリンクを張られる場合に、リンクタグの属性を指定できるように想定されていますが、現在ではこれを利用する機能はMODX本体には存在しません。 |
| [*richtext*] | リッチテキスト エディタで編集 | リッチテキストエディタで編集する設定になっているかどうかを示します。 |
現在のMODXでは非推奨な変数
| リソース変数名 | 対象 | 備考 |
|---|---|---|
| [*hasmetatags*] | 関連meta要素 | 関連するmeta要素を持っているかどうかを示します。現在のMODXでは非推奨。 |
| [*haskeywords*] | 関連キーワード | 関連キーワードを持っているかどうかを示します。現在のMODXでは非推奨。 |
リソース変数の使い方・実例A
<html>
<head>
<title>[*pagetitle*]</title>
<meta name="description" content="[*description*]" />
</head>
<body>
<h1>[*longtitle*]</h1>
<div>[*content*]</div>
</body>
</html>
投稿画面上の「リソース名」「description」「タイトル」「本文」に入力した内容が、そのまま出力されます。この例では[*pagetitle*]と[*longtitle*]を使い分けていますが、両方とも[*pagetitle*]を用いることもできます。
リソース変数の使い方・実例B
投稿日や投稿者の情報は、目視で分かる形式になっていませんが、PHxプラグインを用いて変換できます。
<html>
<head>
<title>[*pagetitle*]</title>
<meta name="description" content="[*description:ifempty=`[*pagetitle*]`*]" />
</head>
<body>
<h1>[*longtitle:ifempty=`[*pagetitle*]`*]</h1>
<div>
担当者:[*createdby:userinfo=`username`*]
リリース日:[*pub_date:date=`%Y年%m月%d日`*]
</div>
<div>[*content*]</div>
</body>
</html>
※MODX RevolutionではPHxスタイルの記述を標準でサポートしています。
リソース変数の使い方・実例C
リソース変数はスニペットやプラグインの中でもmodxオブジェクトとして呼び出すことができます。
この場合は $modx->documentObject['リソース変数名'] という形で記述します。
<html>
<head>
<title>[*pagetitle*]</title>
<meta name="description" content="[[description]]" />
</head>
<body>
<h1>[[タイトル]]</h1>
<div>
担当者:[[担当者]]
リリース日:[[リリース日]]
</div>
<div>[*content*]</div>
</body>
</html>
- [[description]] というスニペットを作り、[*description*] に入力がない場合は代わりに [*pagetitle*] の内容を出力するようにセットします。
- [[タイトル]] というスニペットを作り、[*longtitle*] に入力がない場合は代わりに[*pagetitle*] の内容を出力するようにセットします。
- [[担当者]] というスニペットを作り、メンバーIDを実際の投稿者名に変換して出力します。
- [[リリース日]] というスニペットを作り、unixtime形式の投稿日時データを可読な日時形式に変換して出力します。
$desc = $modx->documentObject['description'];
if($desc == '') {$desc = $modx->documentObject['pagetitle'];}
return $desc;
▲[[description]] スニペットの内容
$title = $modx->documentObject['longtitle'];
if($title == '') {$title = $modx->documentObject['pagetitle'];}
return $title;
▲[[タイトル]] スニペットの内容
$info = $modx->getUserInfo($modx->documentObject['createdby']);
return $info['fullname'];
▲[[担当者]] スニペットの内容。このパターンを用いることで、4種類のメンバー情報系のリソース変数の値を意図どおりに得ることができます。
return date('Y年m月d日', $modx->documentObject['createdon']);
▲[[リリース日]] スニペットの内容。このパターンを用いることで、6種類の日付系リソース変数の値を意図どおりに得ることができます。
投稿画面内での参照
投稿画面をカスタマイズするプラグインを作る際、その投稿画面を開いているリソースのリソース変数($modx->documentObject)にアクセスできると便利です。投稿画面内では$modx->documentObjectにアクセスすることはできませんが、代わりに $content が使えます。









