アーカイブ系画面にもメニューを表示

カテゴリ: Movable Type
|

エントリーもだいぶん増えたので、この辺でテンプレートをいじってのカスタマイズに取りかかってみることにします。

デフォルトの Movable Typeのアーカイブ・テンプレートは、メニューのない「1カラム構成」になっています。今はトップページしか検索にヒットしないので問題ないのですが -- ヒットしないのはそれはそれで問題なのですが -- 今後、直接アーカイブページに飛び込むケースが増えてくると、よほど暇なひとで無い限り、他のページを見ようと思ってくれない気がします。これは、営業的にはよろしくありません。(^^;;;;;;
というわけで、やりたいことはいくつかあるのですが、まずはアーカイブ系の画面にも、右にメニューを表示させる変更に取り組むことにします。

変更が必要な場所を把握するために、とりあえずメニューの付いているメインページと、付いていないカテゴリー・アーカイブのテンプレートを比べてみます。

・・・スタイルシートを全ての HTMLで共通に使用するためか、DOMの構造は似ているようです。

詳しく見ると、bodyの classが、"layout-one-column"が "layout-two-column-right"になるのと、id="beta"で区別されるメニュー用の divが有るだけのように見えます。

お、これなら楽勝?と思い、各テンプレートを "layout-two-column-right"対応に変更していきます。
で、再構築。ちゃんとメニューが付いています。めでたしめでたし...

と思いきや、これだけでは、どうやら新規にエントリーを投稿したとき全部再構築しなおさないと、古いアーカイブのメニューが更新されません。OpenBlockSは、ただでさえ遅いのでちょっと許容できない問題です。(でも、だからデフォルトはメニューなしなんでしょうね。ちょっと納得してしまいました)
でも、こんなところで挫折しては技術屋の名折れです。方法を考えます。解決策として、温故知新で SSI(Server Side Include)を併用してみることにしました。

具体的には以下のようにします。

(1) インデックス・テンプレートとしてメニュー部分(div id="beta")だけを切り出したテンプレートを新規に追加する。(menu.htmlとする)
(2) アーカイブ・テンプレートからは SSIの include機能を使用して、最新の menu.htmlをメニューの場所にリクエスト処理時に取り込む。

まず、Apacheの SSI機能を有効にします。

例によって、Debianではインストールされているものの有効にはなっていないので「a2enmod include」で有効にします。
次に、ブログを展開するディレクトリに「Options +Includes」を追加して、SSIを有効にします。
さらに、SSIを使用するファイルの識別を実行ビットで行わせるための「XBitHack full」も追加します。(メニューの更新のためにキャッシュを無効にするのもどうかと思うので、fullを指定して更新日付を扱うようにしています)

Apacheの設定が終わったら、Movable Typeが作成する HTMLで SSIが有効になるように mt-config.cgiのコメントになっている以下の行を有効にします。(これで実行ビットが ONになります)

HTMLUmask 0022
HTMLPerms 0777

最後に、インデックス・テンプレートとしてメニュー部分(div id="beta")だけを切り出したテンプレートを新規に追加し、アーカイブ・テンプレートのメニュー部分を「 <!--#include virtual="/menu.html" -->」で、SSIを使用して読み込むように変更し、終わったら再構築して確認します...

新規エントリーを追加してからでないと、厳密には確認できないですが、仕事でやってるわけではないので、今までのページがちゃんと出れば、とりあえず OKとします。 (^^;;;;;;;;

「Movable Type」の新着

最近のコメント


最近のコメントを表示...
Powered by Movable Type 7.1.1