最近個人サイトに手を加えているのですが、サイト全体で共通のコード(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ファイルで処理されるためです。そこで、簡単に解決する方法を考えてみました。
解決方法
- 「ウェブサイトテンプレートの管理」画面を開き、テンプレートモジュールのところで「テンプレートモジュールの作成」をクリックします。
- テンプレート編集画面が開くので、適当なテンプレート名を付与します。テンプレートは何も記述しません。そして、「テンプレートの設定」をクリックして入力欄を開き、「ファイルへのリンク」欄にSSIでインクルードしているファイルへのパスを記述します。
例)inc/javascript.inc - 「変更を保存」をクリックし、編集を確定します。画面がリロードされると、テンプレート入力欄に、SSIでインクルードしているファイルの内容が表示されると思います。
コメントプレビューページとコメント完了ページのテンプレートを開き、SSIでインクルードしているファイルの内容と同じ部分にあたるコードを、下記のMTタグに置き換えます。
<$mt:Include module="手順2で作成したテンプレート名" blog_id="ウェブサイトのブログID"$>
以上の手順で作業完了です。コメントプレビューページとコメント完了ページは常に動的に生成されるため、常にSSIで出力している内容と同じコードが出力されます。疑似SSIといったところでしょうか。
以上、MTのテンプレートファイルリンク機能とコメントテンプレートの出力処理方法を応用したテクニックのご紹介でした。