石輪っぷり!
インクルードに関わるいろいろ
2009年5月 8日 20時43分 | コメント(0) | トラックバック(0)
※この投稿は180日以上前のものです。最新の情報とは異なる場合があります。
Movable Typeでサイトを構築する際、各ページの共通部品はモジュール化してそれぞれのテンプレートにインクルードします。リニューアル前のサイト(MT3.35で構築)は共通部品をインデックステンプレートで書き出し、PHPのインクルードを使っていました。
今回のリニューアルでは、共通部品を条件分岐を多用しながら主にグローバルテンプレートで作成し、それぞれのテンプレートにインクルードして構築していましたが、右側のバナーが月別アーカイブやカテゴリ別アーカイブで表示できない、ブログのページでは月別やカテゴリ別の記事一覧ページで、ページ毎に表示される内容が異なるなどの問題があり、MT4.15から実装されたサーバーサイドインクルード(SSI)を利用して、PHPのインクルードで処理することとしました。その方がPHPを使った動的処理ができたり、再構築時間の短縮やファイル容量の削減につながりますし。
しかし、しばらくグローバルテンプレートを使用することに慣れ親しんでいた(最近構築したサイトでは上記の問題に遭遇することが少なかった)ため、単にPHPインクルードに置き換えるだけでは多々問題がありました。
まず、条件分岐によって各テンプレートが読み込む内容を変えるようにしているような場合は使えませんので、PHPインクルードを使用する部分は各ページに読み込む内容が同じものでなければなりません。HTMLヘッダーの内容やパンくずリストなど、条件分岐を多用して構築していたため、かなり書き直す羽目になりました。
#MT4.0でデフォルトテンプレートが、条件分岐とテンプレートモジュールをを多用した複雑怪奇なものとなり、わかり難いとのことで、MT4.2からシンプルなものになりましたが、SSIを使うならこれをベースにした方がよいみたいです。(もっとも、私の場合は一から書き直してますが。)
また、グローバルテンプレートではSSIが使えないため、メインのブログ等のテンプレートモジュールに設定し、PHPのインクルードとして使えるようにする必要があります。
MTのSSIの機能のよいところは、テンプレートモジュール側で"PHPのインクルードとして処理する"設定をし、<$MTInclude module="テンプレートモジュールの名前"$> と記述すれば、サイトパス/includes_c/ の中にPHPのファイルとして格納され、読み込む側のインクルード文はPHPのコードに置き換えて処理される点です。また、コメントプレビューや検索結果などのシステムテンプレートではPHPは使えませんので、こちらは通常のモジュールのインクルードとして処理されます。
しかし、ここでまた問題が。
このサイトのそれぞれのブログのサイドバーをテンプレートモジュールにPHPインクルードとして設定し、"最近のブログ記事"などのパーツは個々にグローバルテンプレートに書いて、それぞれのブログで必要なパーツを読み込むようにしたのですが、記事を投稿したり、コメントが投稿されたりすると、最近のブログ記事などの一覧が最新のものでなくなってしまうのです。
あれこれ試した結果、どうもインデックステンプレートを再構築すると最新の状態になります。ということは、投稿などの際にはインデックステンプレートの後にアーカイブテンプレートが再構築され、最終的に月別か何かのテンプレートを基準にリストアップされた内容が残ってしまうってことでしょうか。
つまり、PHPで読み込むテンプレートをインデックステンプレートに設定すれば解決するわけです。MTの機能を使えないのはしゃくですが。
というわけで、サイドバーをテンプレートモジュールからインデックステンプレートに移し替えて適当なディレクトリに保存し、インデックステンプレートではMTのSSIは設定できませんので、各テンプレートでは直接PHPインクルードのコードを書いて読み込ませるようにしました。
その際、システムテンプレートではPHPが使えませんので、サイドバーは"side_bar.inc"などのファイル名で保存し、インデックステンプレートやアーカイブテンプレートにはPHPのコードで
<?php include("<$mt:BlogSitePath$>ディレクトリ名/side_bar.inc"); ?>
一方、システムテンプレートにはMTのインクルードを使って
<$mt:Include file="ディレクトリ名/side_bar.inc"$>
のように書きます。
また、New! の表示などPHPを使用(今回当初JavaScriptを使用してましたが、PHP化に伴い変更しました)している部分は
<mt:Unless name="system_template">PHPのコード部分</mt:Unless>
としてシステムテンプレートでは適用されないようにしておきます。
MTカスタマイズのサイトを作る毎に経験と知識が蓄積されますが、年齢的にだんだん記憶が怪しくなってきます。(汗 ブログとかに書き留めておかないと。
トラックバック(0件)
- :
- « 前の記事
- リニューアル
- 次の記事 »
- Google Custom Search と SSL

コメント(0件)
コメントする