【第7回】サイトごと・画面ごとにカスタマイズを出し分ける - MTAppjQuery で Movable Type 9 のリッチテキストエディタをカスタマイズ

2026-08-24
10分で読了
更新: 2026-08-24
mtappjquery-customize-rte.webp

目次

この記事は「MTAppjQuery で Movable Type 9 のリッチテキストエディタをカスタマイズ」の第7回、最終回です。

これまでの回で、ツールバー、段落やカラーパレット、見た目、拡張と、ひととおりのカスタマイズ方法を見てきました。最終回の今回は、それらを「必要な場所にだけ」適用する方法をご紹介します。MT9 本体の設定画面ではできない、MTAppjQuery ならではの締めくくりです。

なぜ出し分けが必要になるのか

第1回でお伝えしたとおり、MT9 のリッチテキストエディタ設定画面はシステム全体で共通です。ところが実際の運用では、こんな要望が出てきます。

  • コーポレートサイトはフル機能、ブログサイトは最小構成のツールバーにしたい
  • ウェブページの編集画面だけエディタの高さを広くしたい
  • カラーパレットはサイトごとのブランドカラーにしたい

こうした「サイトごと」「画面ごと」の調整が、MTAppjQuery なら自然に実現できます。方法は2つあります。

方法1 - 自由テキストエリアのスコープで出し分ける

実は、いちばん簡単な出し分けは MTAppjQuery の設定画面そのものでできます。

MTAppjQuery のプラグイン設定は、システム(全サイト共通)とサイトごとの両方で行えます。自由テキストエリアもサイトごとに書けるので、サイト A の設定画面にはサイト A 用のコードを、サイト B にはサイト B 用のコードを貼り付ければ、それだけで出し分けの完成です。

  • 全サイト共通のカスタマイズ → システムスコープの自由テキストエリアに書く
  • そのサイトだけのカスタマイズ → 各サイトの自由テキストエリアに書く

コードによる条件分岐が不要なので、管理も分かりやすくなります。まずはこの方法で足りないかを考えてみてください。

方法2 - mtappVars で条件分岐する

もう少し細かく制御したい場合は、コードでの条件分岐です。MTAppjQuery が管理画面の全ページに用意してくれる mtappVars オブジェクトには、現在の画面に関する情報が入っています。出し分けによく使うのは次の2つです。

  • mtappVars.blog_id — 現在のサイト(ブログ)の ID。環境によって数値ではなく文字列で入ることがあるため、比較するときは Number() で数値に揃えてください
  • mtappVars.screen_id — 現在の画面の ID(記事編集画面なら edit-entry など)

これを create イベントの中で参照します。

<script type="module">
if (window.MTRichTextEditor) {
    MTRichTextEditor.on('create', (options) => {
        // サイト ID が 2 のときだけツールバーを最小構成に
        if (Number(mtappVars.blog_id) === 2) {
            options.toolbar = [
                [
                    [
                        ['block'],
                        ['bold', 'italic'],
                        ['link', 'unlink'],
                    ],
                    [['undo', 'redo']],
                ],
            ];
        }

        // ウェブページの編集画面だけエディタを広く
        if (mtappVars.screen_id === 'edit-page') {
            options.height = 700;
        }
    });
}
</script>

screen_id の値は、各画面で body 要素の id 属性を見るか、コンソールで mtappVars.screen_id を実行すると確認できます。記事の編集画面は edit-entry、ウェブページは edit-page、コンテンツデータは edit-content-type-data です。

height は単位なしの数値で渡してください。'700' のように文字列で書くと、エラーも出ないまま無視されます。また height を指定しない画面では、編集者が最後にリサイズした高さが使われます。詳しくは第4回をご覧ください。

システムスコープの自由テキストエリアにこの形で書いておけば、1か所のコードで全サイトの出し分けを管理できます。サイト数が多い場合はこちらの方が見通しが良いこともあるので、方法1と使い分けてください。

応用 - 特定のフィールドだけカスタマイズする

コンテンツタイプを使っていると、複数のリッチテキストフィールドが1画面に並ぶことがあります。「概要フィールドは最小構成、本文フィールドはフル機能」のような出し分けをしたい場合は、options.id を見ます。

create イベントの options には、これから生成されるエディタの対象となるテキストエリアの id が入っています。コンテンツフィールドなら editor-input-content-field-5 のように末尾がフィールドの ID になります。記事の本文は editor-input-content、続きは editor-input-extended です。

MTRichTextEditor.on('create', (options) => {
    // options.id は String オブジェクトなので、String() で文字列に揃えてから比較する
    const id = String(options.id);
    console.log(id); // どのフィールドかを確認

    if (id === 'editor-input-content-field-5') {
        options.toolbar = [
            [
                [['bold', 'italic'], ['link', 'unlink']],
            ],
        ];
    }
});

create イベントはエディタひとつごとに発火するので、id で分岐すればフィールド単位のカスタマイズになります。実際の id は、まず console.log で確認してから条件に使ってください。

String() で揃えるのを省略しないでください

options.id は、見た目こそ文字列ですが、プリミティブな文字列ではなく String オブジェクトです。typeof options.id'string' ではなく 'object' を返します。

そのため options.id === 'editor-input-content-field-5' と書くと、常に false になります=== は型まで比較するからです。エラーも警告も出ないので、「コンソールに表示された文字列をそのまま書いたのに、なぜか何も起きない」という、いちばん気づきにくい形で失敗します。

String(options.id) で文字列に揃えてから比較してください。mtappVars.blog_id のときと同じ考え方です。

入力フォーマットが「リッチテキスト」でないと発火しません

create イベントは、リッチテキストエディタ(WYSIWYG)が生成されるときだけ発火します。

テキスト(複数行)フィールドの入力フォーマットが「リッチテキスト」以外になっていると、MT はソース編集用のテキストエリアを表示するだけで、エディタを生成しません。この場合 create は発火しないので、options.id による出し分けも効きません。

出し分けが効かないときは、コンテンツタイプの設定でそのフィールドの入力フォーマットを確認してみてください。

連載のまとめ

全7回を通して、MT9 の新しいリッチテキストエディタを MTAppjQuery でカスタマイズする方法を見てきました。振り返っておきましょう。

  • 第1回 カスタマイズの入口は MTRichTextEditor.on('create', ...)。自由テキストエリアに type="module" で書く
  • 第2回 ツールバーは4階層の配列。options.toolbar を差し替えるか加工する
  • 第3回 段落ドロップダウンとカラーパレットは toolbarOptions で調整する
  • 第4回 stylesheetsclassNames で編集画面の見た目を実サイトに合わせる
  • 第5回 extensionOptions で組み込み機能を調整・無効化し、htmlOutputOptions で出力 HTML を整える
  • 第6回 import('@tiptap/core')ToolbarItemElement で独自機能を追加する
  • 第7回 スコープと mtappVars で、必要な場所にだけカスタマイズを届ける

エディタは編集者が毎日触る場所なので、小さなカスタマイズでも運用の快適さに直結します。この連載が、MT9 移行後の管理画面づくりの助けになれば嬉しいです。

連載は以上となります。最後までお読みいただきありがとうございました。

この記事をシェア

関連記事