MODXのリソース(ドキュメント)
MODXの「リソース(ドキュメント)」とはブログでいう「記事」にあたるものです。
            リソースの各項目はリソース変数と呼ばれページの表示や拡張機能で使用できます。
            本文やテンプレート変数内ではMODXタグが使用できます。
- ドキュメントとリソースの関係
- 他のドキュメントへのリンクの書き方
- ローカルリンク(ページ内リンク)の書き方
- ページタイトルの付け方
- ひとつのフォルダの中に大量のドキュメントを作る場合
- 投稿画面を使いやすいようにカスタマイズする
- リソース変数一覧(各項目と記事設定等)
- API
ドキュメントとリソースの関係
            リソースとは「ドキュメント」「ウェブリンク」「シムリンク(Revoのみ)」「スタティックリンク(Revoのみ)」を総称した言い方です。
            MODXではリソースを作成する時に、リソースのタイプを以下の種類から選択する事ができます。
Evoのリソースは以下の2種類があります。
- ドキュメント - CMS上で記事を管理する通常のドキュメントリソース
- ウェブリンク - 他のリソースやURLにリダイレクトさせる
Revoのリソースは以下の4種類があります。
- ドキュメント - CMS上で記事を管理する通常のドキュメントリソース
- ウェブリンク - 他のリソースやURLにリダイレクトさせる
- シムリンク - リダイレクトせずに他のリソースを複製する
- スタティックリソース - サーバー上のファイルを読みこませる
この2種類(4種類)の総称で「リソース」と呼ばれます。
            というわけで「ドキュメント」とは「ドキュメント」に設定した「リソース」なわけです。
MODXで管理していないページをウェブリンクに設定しておくことで、Wayfinderなどで動的に表示したいときそのページもメニューのひとつとして表示させる事が出来ます。
他のドキュメントへのリンクの書き方
[~id~]
IDを使ってリンクすることで、エイリアスを変えたりツリー構成を変更してもサイト内でリンク切れが起きません。
ローカルリンク(ページ内リンク)の書き方
baseタグがあるため単にアンカーにリンクを貼るだけだとホーム画面へ飛んでしまいますが、これは自分自身のURLをつけることで回避することができます。
[~[*id*]~]#AnchorName
ページタイトルの付け方
MODXのタイトルは下のように3つ似たようなものがあります。
| リソース名 | pagetitle | 管理画面ツリーや他のタイトルが無い時に使用する | 
|---|---|---|
| タイトル | longtitle | 長いタイトル | 
| メニュータイトル | menutitle | スニペットなどで使用するメニュー用のタイトル | 
「タイトル」と「メニュータイトル」が未入力の場合は自動的に「リソース名」が使用されるので全てを入力する必要はないですが、見た目や検索サイト向けに使い分けるといいでしょう。
            ちなみに私は「リソース名」は短いタイトル、「タイトル」に単体で意味の通じるタイトル。「メニュータイトル」は基本使ってません。
リソース名 基本設定だと管理画面のツリーの見出しにも使用されます
Ajaxメニューを作る
タイトル H1などに使用
Wayfinder+Ditto+jQueryでAjaxメニューを作ってみるチュートリアル!
メニュータイトル パンくずやナビゲーションに使用
Wayfinder+Ditto+jQueryでAjaxメニューを作る
ひとつのフォルダの中に大量のドキュメントを作る場合
更新履歴やブログのようにひとつのフォルダ内に子ドキュメントが大量になる場合、ツリーでの管理は逆に使いづらくなることがありますが、これの回避策として100件を超えるツリーの内容は非表示になり、一般のCMSのように記事一覧画面で管理するようになります。
上限の100件という数字は、ツール>グローバル設定>管理画面の設定タブの「コンテナ内の表示数」で変更することができます。

下の画像は用語集のリソースですが、フォルダの中を見た場合一般的なCMSのように数件づつにページングしてくれます。

参考サイト
投稿画面を使いやすいようにカスタマイズする
- ManagerManagerで管理画面をカスタマイズ
- 本文HTMLエディタのTinyMCEをカスタマイズする
- QuickManagerでプレビュー画面から編集する
リソース変数一覧(各項目と記事設定等)
表示タグは[*var*]です。
| 値 | 選択値 | 説明 | 
|---|---|---|
| ドキュメント情報 | ||
| id | ドキュメントのID。API:$modx->documentIdentifierで取得できます。 | |
| type | ドキュメント、フォルダ、またはウェブリンクかどうか。 | |
| contentType | text/htmlなどのコンテンツタイプ。 | |
| pagetitle | ページのタイトル。タイトルが長い場合はこれで短いめのタイトルにするのがおすすめ。 | |
| longtitle | ページの長いタイトル。実際の表示の時のページタイトル部分に使用するのがおすすめ。 | |
| description | ページの説明。 | |
| alias | ページのエイリアス。フレンドリーURLを作成するときに使用。 | |
| link_attributes | リンクの属性 | |
| published | [0|1] | ドキュメントが公開されているかどうか。 | 
| pub_date | ドキュメントの公開日。タイムスタンプなので表示する場合は変換が必要。 例:strftime("%d/%m/%y %H:%M:%S", $value) | |
| unpub_date | ドキュメントの非公開日。この日時になるとpublishedが0になります。タイムスタンプなので表示する場合は変換が必要。 | |
| parent | ドキュメントの親のID。 | |
| isfolder | [0|1] | ドキュメントがフォルダであるかどうか。 | 
| introtext | ドキュメントの要約。 | |
| content | ドキュメントの内容。 | |
| richtext | [0|1] | ドキュメントを編集するときにリッチテキストエディタを使用するかどうか。 | 
| template | ドキュメントに使用するテンプレートのID。 | |
| menuindex | ドキュメントがメニューに表示される順序。 | |
| searchable | [0|1] | ドキュメントを検索可能にするかどうかを示します。 | 
| cacheable | [0|1] | ドキュメントがキャッシュされるかどうか。 | 
| 日時関連と操作したユーザー | ||
| createdby | ドキュメント作成者のユーザーID。 | |
| createdon | ドキュメントが作成された日付。タイムスタンプなので表示する場合は変換が必要。 | |
| editedby | ドキュメントを最後に編集したユーザーのID。 | |
| editedon | ドキュメントが最後に編集された日付。タイムスタンプなので表示する場合は変換が必要。 | |
| deleted | [0|1] | ドキュメントが削除されているかどうか。ゴミ箱から完全に削除をしなければデータベースから削除はされません。 | 
| deletedon | ドキュメントが削除された日付。タイムスタンプなので表示する場合は変換が必要。 | |
| deletedby | ドキュメントを削除したユーザーのID。 | |
| publishedon | 実際に公開が開始された日時(?)@要調査 | |
| publishedby | 公開メンバー, 公開操作を行なったメンバーのID | |
| menutitle | メニューに表示されるタイトル。空の場合はpagetitleが使用されます。 | |
| donthit | [0|1] | ドキュメントのページのヒットカウントを無効にします。 | 
| haskeywords | [0|1] | ドキュメントがキーワードへのリンクがあるかどうか。※非推奨項目 | 
| hasmetatags | [0|1] | ドキュメントがメタ・タグへのリンクがあるかどうか※非推奨項目 | 
| privateweb | [0|1] | このドキュメントがプライベートWebドキュメント・グループに割り当てられているかどうか。 | 
| privatemgr | [0|1] | このドキュメントがプライベートマネージャの文書グループに割り当てられているかどうか。 | 
| content_dispo | [0|1] | リソースの出力が添付(ダウンロード)またはインライン(表示)であるかどうか。 | 
| hidemenu | [0|1] | メニューで隠されるかどうか。 | 
比較的よく使うものは色付きで表示しています。それ以外は拡張機能を使ったり作らないかぎり基本的に使用しなくても特に問題無いです。
API
ドキュメントオブジェクトです。プロパティには上記のドキュメント情報が入っています。
$modx->documentObject
            $modx->documentObject['id'] // リソースのID
            $modx->documentObject['parent'] // 親リソースのID
ドキュメントのIDは直接参照できます。
$modx->documentIdentifier

