SSIとMovable Typeのコメントプレビュー・コメント完了テンプレート

公開

最近個人サイトに手を加えているのですが、サイト全体で共通のコード(meta要素やJavaScriptの読み込みなど)に手を加えることが多かったため、Movable Typeのテンプレートファイルから該当部分を取り出し、SSIを利用するように変更しました。インクルードファイルはMovable Typeのテンプレートとはせず、エディタで作成してアップしました

  • Webサイトを構築した当初はMT4で、「ウェブサイト」という概念がなかったためMTで生成していないページがあること、またローカルで該当ファイルを編集した方が手早く更新できる、というのが理由です。

ほとんどのページはこれで問題なく表示されていたのですが、唯一コメントプレビューページとコメント完了ページで不具合が発生していました。不具合の内容は、SSIが実行されず、テンプレートに記述したSSIがそのまま出力されていることです。

テンプレートに記述したSSI
<!--#include virtual="インクルードファイルのパス" -->
インクルードファイルの内容(例)
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
<script type="text/javascript" src="/shared/js/jquery.fancybox-0.5.js"></script>
<script type="text/javascript" src="/shared/js/mjl.js"></script>
<script type="text/javascript" src="/shared/js/run.js"></script>

これは、コメントプレビューページとコメント完了ページが静的に出力されたHTMLファイルではなく、CGIファイルで処理されるためです。そこで、簡単に解決する方法を考えてみました。

解決方法

  1. 「ウェブサイトテンプレートの管理」画面を開き、テンプレートモジュールのところで「テンプレートモジュールの作成」をクリックします。
  2. テンプレート編集画面が開くので、適当なテンプレート名を付与します。テンプレートは何も記述しません。そして、「テンプレートの設定」をクリックして入力欄を開き、「ファイルへのリンク」欄にSSIでインクルードしているファイルへのパスを記述します。
    例)inc/javascript.inc
    テンプレート編集画面
  3. 「変更を保存」をクリックし、編集を確定します。画面がリロードされると、テンプレート入力欄に、SSIでインクルードしているファイルの内容が表示されると思います。
  4. コメントプレビューページとコメント完了ページのテンプレートを開き、SSIでインクルードしているファイルの内容と同じ部分にあたるコードを、下記のMTタグに置き換えます。

    <$mt:Include module="手順2で作成したテンプレート名" blog_id="ウェブサイトのブログID"$>

以上の手順で作業完了です。コメントプレビューページとコメント完了ページは常に動的に生成されるため、常にSSIで出力している内容と同じコードが出力されます。疑似SSIといったところでしょうか。

以上、MTのテンプレートファイルリンク機能とコメントテンプレートの出力処理方法を応用したテクニックのご紹介でした。