[*リソース変数*]
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*] | メニュー タイトル | ナビゲーション用のタイトルとして、短い文字列が必要な場合に。 |
[*description*] | 説明 description | metaタグのdescription属性として用います。この場合はhtmlタグが混じらないよう気をつけてください。 |
[*introtext*] | 要約(序説) | 序文・リード文などを配置するタイプのコンテンツに用います |
日付に関するリソース変数
UNIXTIME形式です。2024年12月31日02時17分であれば「1735579074」という値になります。このままではコンテンツとして用いることができないため、モディファイアを用いるとよいでしょう。
リソース変数名 | 対象 | 備考 |
---|---|---|
[*createdon*] | 作成日時 | ページを最初に作成した日時。この値は管理画面操作では変更できません。 |
[*publishedon*] | 公開日時 | ページが実際に公開された日時。いったん非公開に戻して再公開すると値が更新されます。 |
[*editedon*] | 更新日時 | ページを更新した直近の日時。更新するたびに値が変わります。 |
[*pub_date*] | 公開予定日時 | 公開を予定している日時。過去の日時をセットすると公開されます。 |
[*unpub_date*] | 公開終了日時 | 公開終了を予定している日時。非公開に戻った後もこの値は変わりません。 |
[*deletedon*] | 削除日時 | ページを削除した日時。復活可能な状態で残っています。 |
モディファイアを用いて日付を表示する方法
[*createdon:date(%Y年%m月%d日)*]
管理メンバーに関するリソース変数
管理画面のログインユーザのID値が入ります。そのままではコンテンツに用いることができないため、モディファイアを用いてメンバー名やメンバーのメールアドレスなどに変換するとよいでしょう。
リソース変数名 | 対象 | 備考 |
---|---|---|
[*createdby*] | 作成メンバー | このリソースを最初に作成したメンバーのID。 |
[*publishedby*] | 公開メンバー | 公開操作を行なったメンバーのID。 |
[*editedby*] | 編集メンバー | このリソースを最も直近で編集したメンバーのID。 |
[*deletedby*] | 削除メンバー | そのページを削除したメンバーのID。復活できる状態のリソースのみが対象で、完全に消去した場合はデータはありません。 |
モディファイアを用いてメンバー情報を表示する方法
[*createdby:userinfo(fullname)*]
※ログイン名(username)の表示は気をつけてください(セキュリティ上の理由)。
コンテンツ構造に関する情報
整数値
リソース変数名 | 対象 | 備考 |
---|---|---|
[*template*] | テンプレート | テンプレートID |
[*parent*] | 親リソース | 親リソースのID |
[*menuindex*] | メニューオーダー | Wayfinderスニペットなどを用いて実装するナビゲーション上での並び順。Dittoでも用いられます。 |
[*hidemenu*] | メニューに表示 | メニューに表示するかどうか。 |
[*alias*] | エイリアス | フレンドリーURL設定が有効な場合、URL表現に用いられます。 |
コンテンツの状態に関する情報
「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*] | リッチテキスト エディタで編集 | リッチテキストエディタで編集する設定になっているかどうかを示します。 |
任意のリソースのデータを表示する方法
[*pagetitle@8*]
上記のように記述すると、ID8のリソースのpagetitleを表示します。この記法は本家版MODX EvolutionのフォークプロダクトであるClipperCMSの記法に倣いました。
[*pagetitle@parent*]
親リソースのpagetitleを表示します。
[*pagetitle@ultimateParent*]
現在のリソースを子孫?に持つ最上位のリソースのpagetitleを表示します。
[*pagetitle@ultimateParent(3)*]
現在のリソースを子孫に持ち、ID3のリソース階層以下に属する最上位のリソースのpagetitleを表示します。
[*pagetitle@ultimateparent*]
[*pagetitle@ULTIMATEPARENT*]
大文字小文字の違いを区別しません。
[*pagetitle@p*]
[*pagetitle@up*]
略記できます。それぞれparent・ultimateParentです。
[*pagetitle@site_start*]
トップページのpagetitleを表示できます。
リソース変数の使い方・実例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
<html>
<head>
<title>[*pagetitle*]</title>
<!--@IF [*description*]>
<meta name="description" content="[*description*]" />
<@ENDIF-->
</head>
<body>
<h1>[*longtitle:ifempty([*pagetitle*])*]</h1>
<div>
担当者:[*createdby*]
リリース日:[*pub_date:date(%Y年%m月%d日)*]
</div>
<div>[*content*]</div>
</body>
</html>