WEB

Movable Typeのテンプレートカスタマイズで使えるMTIncludeの活用方法

Movable Typeのテンプレートカスタマイズで使えるMTIncludeの活用方法

どうも、エンジニアのしょごです、こんにちわ。
個人的に浴衣といえば、帯の結び目部分が分離してあって出来合いのものを掛けるだけタイプだとテンションが下がります。一本の帯でちゃん締めてください、お願いします。

さて、今回はMovableTypeのテンプレートカスタマイズにて使えるMTIncludeタグの活用法についてご紹介します。

MTIncludeタグとは

テンプレートモジュールや外部ファイル、ウィジットを読み込むときに使うタグです。

  • 記述例
<$MTInclude module="モジュール名">
<$MTInclude file="/var/www/htdocs/yukata.html"$>
<$MTInclude widget="ウィジット名"$>

テンプレート化する際、コンテンツの中で共通の箇所があります。これらを全てのテンプレートにそのまま記述しておくと、メンテナンス時に全てのテンプレートを修正することになってしまいます。

そこで、各テンプレートを作成する中で、共通部分をモジュールテンプレートに保存し、パーツ化してMTIncludeタグで読み込み共通化をおこなうことで、メンテナンス性を向上させることができます。

モジュールテンプレートを用いてパーツの共通化をする

まず、モジュールテンプレートに共通化したいHTMLやロジックを名前をつけて保存します。具体的には、各テンプレートの任意の場所にて

<MTInclude module="twintail">

のように記述します。
呼び出したいモジュールテンプレートの名前をmodule属性に加えて記述して、テンプレートの内容をインクルードできます。

モジュールテンプレートは同ブログ内だけでなく、他のブログやWebサイトから呼び出すことも可能です。

<MTInclude module="twintail" blog_id="1">

と記述することでブログID1に保存されている「twintail」モジュールテンプレートを呼び出せます。

複数ブログを作りそれぞれでコンテンツを管理する際、全ブログで共通のヘッダー・フッターを一元管理したい場合は、どこかのブログ、もしくはそれらブログを配下としているWebサイトにてモジュールテンプレートを作成し、WebサイトのIDを上記のblog_idに記載してあげれば可能となります。

もしくはWebサイトが1つで、その中で複数ブログを運用しているパターンであれば

<MTInclude module="twintail" parent="1">

のように記載することで、ブログが所属しているWebサイトのモジュールテンプレートから参照することができます。

各ブログで共通ので読み込みたいのであれば、Webサイトのモジュールテンプレートに格納してあげたほうが、管理的にはわかりやすいですね。
ただし、この使い方は利用しているMTのバージョン5.1以降でのみ対応となりますので注意してください。

また、

<MTInclude module="twintail">

上記のような記述をブログのテンプレートで記述した場合は、原則同ブログ内のモジュールテンプレートに紐付けがされます。

紐付けされた場合は右側にこのように表示されます。

ok_module

 

しかし、同ブログ内に指定した名前のモジュールテンプレートが存在しなかった場合は、下記のように表示されます。

no_module

 

新規投稿をクリックするとモジュールテンプレートの新規作成画面へショートカットすることができます。名前も自動で入力されているので、作成が便利です。

また、ブログ内のモジュールテンプレートには存在しないがグローバルテンプレートには存在しているという場合は、下記のようにグローバルテンプレート内のモジュールテンプレートへ紐付けされます。

sysutem_module

グローバルテンプレートは左上の▼をクリックして表示される「システム」→左ナビの「テンプレート」をクリックすると管理画面が表示されます。色付けされてるのでわかりやすいですが、コードだけで追いかけようとすると迷いやすいかもしれません。

ですが、Webサイトを複数管理し、それら共通で管理したいロジックやHTMLがあった場合はグローバルテンプレートを用いると記載も共通でいけるので管理はしやすいでしょう。

サイト構成を大掛かりにしていく場合は、共通で管理したいモジュールテンプレートの位置をよく見極めて管理すると、効率がよくなります。

モジュールテンプレートの注意点

共通管理するのはプレーンなHTMLだけではなく、MTタグを記載することで、MTロジックを共通化することも可能です。

ただし、呼び出すブログをまたいで使用する場合などは注意が必要で、そのブログ特有のカスタムフィールドの情報を取得するときはモジュールの記述を限定的にする必要があります。

また、静的パーツの場合でも、エントリーが増えていくと出力するファイルも多くなります。テンプレートモジュールの変更を全てのファイルに反映しようとすると、再構築が完遂するまでに時間がかかってしまうことがあります。この場合はサーバーサイドインクルードを利用すると効率がよくなります。

モジュールテンプレートでサーバーサイドインクルードを利用する

通常モジュールテンプレートでのインクルードは、再構築時にパーツを掛け合わせてファイルを生成する形になります。しかしサーバーサイドインクルードとして処理させると、読み込む場所を静的ファイルとして出力しておき、ファイルを表示させるタイミングでインクルードさせる形にすることができます。
これにより、1つのファイルを更新するだけで、他のテンプレートを再構築する手間を省くことができます。

サーバインクルードを利用方法と注意点

まずブログの「設定」→「全般」→「モジュール設定」にてサーバーサイドインクルードの方法を設定します。
ApacheのSSIの場合は、サーバ側でSSIを利用する調整が必要になります。PHPのインクルードなどはファイルの拡張子を合わせれば利用できます。

上記設定後、モジュールテンプレートのテンプレートの設定を開くと「サーバーサイドインクルード」という項目が表示されています。チェックボックスにチェックをすることで、そのモジュールを呼び出す際にサーバーサイドインクルードとして利用することができます。

これらの設定をおこなった後、テンプレートで下記のように記述し、再構築をおこないます。

<MTInclude module="twintail" ssi="1">

こちらで出力すると、今までモジュールテンプレートに保存していた内容がそのまま出力されていた場所で、設定したインクルード方式に合わせた記述に変わります。

サーバーサイドインクルードを利用することで、管理も楽におこなうことができます。

さいごに

いかがでしたでしょうか。
MTIncludeを活用することで共通パーツの管理はもちろん、テンプレートや登録方式に応じて出力ロジックを使い分けしたりすることも可能になります。
またMovableTypeの特徴といえる、静的ファイルの出力をおこなう再構築で時間がかかりすぎてしまっている際の効率化、なども見込むことができます。

ぜひ活用してみてください。

この記事を書いた人

しょご
しょご バックエンドエンジニア 2014年入社
エンジニアのしょごです。昼はシステム開発に奮闘し、夜は女冒険者として剣とか魔法とか扱ったり、たまにバンドでライブとか、イベントでコスプレしたりしてます。