サイドメニューの共有化(テンプレートモジュール化)

2004年10月6日

ここ最近、ブログのカスタマイズをちょこちょことしていたわけですが、大きな壁にぶち当たりました。
その壁とは、「再構築」時のエラーです。

個別記事(indivisual archives)を再構築しようとすると、エラーがでて途中で終了してしまう状況です。

    個別記事の再構築時エラーが出る原因としては、

  1. サーバーに高負荷がかかるため規制がかかり、強制終了される。
  2. サーバーのスペックが弱いため、耐えられなくなる。

などがありますが、これを強引に続けようとすると、サーバーダウンの可能性も出てくるので、要注意です。

今回、デザインをカスタマイズする前に過去ログなどを先にエントリーさせてしまったため、個別記事アーカイヴを一度にリビルドしようとするとエラーが頻発するようになってしまったのです。
※先にデザインを固めておけば、問題は起こらなかったのでは?という質問は却下。

そこでこれを機に、サイドメニューをテンプレート化してしまおうと思いつきました。
方法は色々あるようですが、今回はこちらを選びました。
あなたのmovabletype、重たくないですか?(テンプレートモジュール化):CROSSBREED

ではその手順を説明(というより覚え書き)しておきます。

1.ブログがphp化されているのが前提なので、各ページがphpで保存されるようカスタマイズします。
  • 関連記事 > Category Archivesのページ分割(当サイト)
  • リファレンス > MTのphp化とページ分割:CROSSBREED
  • 2.次にphpを使用してテンプレート化する場所を「新しいインデックステンプレート」として作ります。

    mt01.gif

    例として、サイドバーにあるデフォルトのlinks部分をテンプレート化します。
    慣れたら色々と自分で出来ると思うので、まずは一番無難な部分と言うことでリンク部分を例にします。
    テンプレート化したい場所を探し出してコピーし、テキストエディタなどに保存します。(下記参照)
    ブログの編集画面にある「管理」の中の「テンプレート」から「新しいテンプレートを作る」で新しいインデクッステンプレートとして保存します。(左図参照)

    例:リンクリストをテンプレート化する場合

  • <dl>
  • <dd>
  • <dt>Links</dt>
  • ここにリンクを追加する場所
  • </dd>
  • </dl>
  • テンプレートの編集画面では以下のように記入します。

  • テンプレートの名前→好きな名前(例:linklist)
  • 出力ファイル名→好きな名前.php(例:linklist.php)
  • 「インデックス・テンプレートを再構築するときに~省略~する」のチェックを外す
  • テンプレートにリンクするファイル→空白
  • テンプレートの中身→上記でコピーした部分をペースト(貼付)
  • ここで1つ確認して下さい。
    上記で「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する」のチェックを外す、としているのは、新しいエントリーを投稿する際にこの「新しいテンプレート」を一緒に再構築しないようにするためです。
    つまり、簡単に言えば別々に再構築するので、サーバー負荷が軽くなると言う事ですね。
    逆に新しいエントリーを投稿する際に一緒に再構築した方が良いもの(例えばリーセントエントリーなど)をテンプレート化する場合はチェックを入れておいても良いと思います。

    3.テンプレートにするphpファイル(先ほど作った新しいテンプレート)を挿入する個所に以下を入れます。
  • <? include(”******/linklist.php”); ?>
  • ******の部分は各自のサーバーでのパスを指定します。
    解らない場合はhttpから始まるパスでも大丈夫です。

    例:http://www.******.com/blog/linklist.php

    4.ここまで終了したら、変更したファイルを再構築します。

    ワタクシの場合は、トップページと個別記事、カテゴリーアーカイヴ、データベースアーカイヴを全て統一したかったので、トップページにあるサイドメニューの全てをテンプレート化しました。

    同じように、「記事部分のテンプレート化」もできるようですが、ワタクシのところではココまではやってません。
    時間のあるときにやってみたいと思います。

    説明不足があるかもしれませんが、発見次第追記していきたいと思います。
    ご質問などはわかる範囲でお答えしたいと思います。
    コメントお待ちしております。

    お疲れ様でした。

    Leave a Reply