月別過去ログ

« アーカイブのエントリー数の表示法 | メイン | 記事タイトルからリンクさせる »

テンプレートのモジュール化

2005年05月13日

*2006年8月13日追記*****
Movable Type 3.3から、
デフォルトでWidget Managerというプラグインが追加されました。
これを使うと、htmlのままテンプレートをモジュール化することができます。
詳しくは「Widget Managerでモジュール化」をご覧ください。
****************



記事数が増えるたびに再構築が大変になっていくブログ・・・。

ヘッダー部分やサイドバー部分をちょこっと変更して全ページに反映させようとすると
関係するテンプレート全てを修正し、それを再構築しないといけません。
するともう時間はかかるし、あげくの果てにエラーが出て失敗しまた再構築・・・。

(ノ ゜Д゜)ノ ==== ┻━━┻

という事、みんな体験しているのではないでしょうか(´・ω・`)

大体どうして一箇所変更するだけであっちもこっちも変更して
全部再構築しないといけないんだ!!
と思っていると、それを回避する方法がありましたよ!
各テンプレートで共通している部分(例えばタイトルとか)を
抜き出し新しいテンプレートにして、
それを表示したい所に読み込んでしまうのです。
(*この共通部分を抜き出して新しいテンプレートにしてしまう事を
モジュール化といいます)

こうすると1つのテンプレートを修正するだけで読み込むページ全部に適用されるので
あっちもこっちも同じ修正をしなくて済みますし
無駄な再構築をしなくて良くなり、快適になると思いますヽ(・∀・)ノ

このカスタマイズは読み込む方のページがphp化されている事が条件です。
php化についてはコチラ→MTをphp化するをご覧ください。

1・まずphp化する
2・モジュール化する部分を抜き出す。

例としてブログの上のタイトル部分(ここではヘッダーと呼びます)を抜き出す方法を。
初期テンプレートのままですと

<div id="banner">
<div id="banner-inner" class="pkg">
<h1 id="banner-header"><a href="<$MTBlogURL$>" accesskey="1"><$MTBlogName encode_html="1"$></a></h1>
<h2 id="banner-description"><$MTBlogDescription$></h2>
</div>
</div>


こんな感じだと思います。
これをコピーします。


3・新しいテンプレートを作る

テンプレートのテンプレートを新規作成をクリック。
テンプレートの内容にコピーしたものをペースト。
テンプレートの名前を「ヘッダー」(何でもいいです)
出力ファイル名を「header.html」(何でもいいです) *注1
再構築オプションのチェックを外します *注2

保存し、再構築します。

*注1 header.htmlとしていますが、
    phpである必要がある(phpスクリプトを使っている)場合は
    header.phpにしてください。この場合のヘッダーでは普通のタグしか
    使われていませんのでhtmlで十分だと思い、そちらにしています。

*注2 ヘッダー部分はデザインを変更した時くらいしか
    再構築する必要が無いと思います。
    なので、再構築時の処理を減らすためにチェックを外しています。
    モジュール化するのが「最近のコメント」などの場合、
    コメントの投稿があった時点でサイトに反映させたいですね。
    そのような時はチェックを付けてください。


4・テンプレートへモジュールを組み込む

各テンプレートの、さっきコピーしてモジュール化した部分を削除します。
替わりに

<?php readfile("/絶対パス/header.html"); ?>

を記入します。

この記入するタグが、よく分かってない私には非常に難解でした(;´Д`)

まず青文字の所にはreadfileの他にincludeを使う事があります。
この使い分け方は
readfile:ファイルを読み込むだけでいいときに使う
include:ファイルを読み込み、それをプログラムとして評価する時に使う
つまり、
readfileはタグなどだけで構成されているファイルを読み込むときに使う。
includeはPHPスクリプトが記述されたファイルを読み込むときに使う。
・・・で合っていると思います(;・ω・)


次に赤文字の所は
読み込むファイルがある場所までのパスを書きます。

上記方法で新しいインデックス・テンプレートを作ったらindex.phpと同じ階層に
header.htmlが出来ていると思います。
indexにheader.htmlを読み込む場合は同じ階層なのでファイル名だけで
いいのですが、モジュールは各アーカイブから利用されるのが一般的なので、
テンプレートごとにパスを書き直すのも面倒ですし、
全部絶対パスを使うのが楽だと思います。

絶対パスとは、トップフォルダから記述したパス名の事です。

なので /mt(MTがあるフォルダ)/header.html 
などになるのではないかと思います。

私の場合、上の絶対パスで失敗してエラーが出ました(´・ω・`)
しかし、そのエラーに出ていたパスを書いてみたら
きちんと表示されるようになりました(`・ω・´)

それでいいのかどうか分かりませんが、
表示されているのでいいことにします(;´з`)y-~

多分エラーが出たのは、xreaのサーバーを使っているからじゃないかな?と思います。
なんか、xreaは色々と面倒な部分があるらしいです・・・。

コメントエラー、検索結果などのCGIを使っているテンプレートの場合は
上のパスでは駄目なので、

<$MTInclude file="/絶対パス/header.html"$>

にする必要があります。


説明が長くなりましたが、4・テンプレートへモジュールを組み込む をやったら
保存、再構築して完成!

ヘッダーだけでなく、最近のコメントなど、
すごい所ではエントリーまでモジュール化できるらしいので
色々やってみてくださいね。

このカスタマイズはphpならばどのバージョンでも使えます。
2007年2月12日更新。
コメント (2)
» 投稿者: 山の爺

始めまして・・・です・・が?・・ゆうさんの所ではお目に掛かっています。
「山の爺」と申す物です、宜しく。
爺もMT成る物を始めて何にも解らず遣っています・・大変参考になります。

なるほど・・readfile、includeの違いが解りました。
訳も解らず全て「include」を使っています。

難解に合ったら又お邪魔しますので宜しく~~ではではご挨拶まで・・。

» 投稿者: りぃ

≫山の爺さん

はじめまして・・・な気がしないですね(笑)
お役に立てれば嬉しいです。

私も自分で書いたこの記事を見ないと
違いなんて覚えていません![がーん]
こんなんで・・・まぁ、いいよね。ウン。

コメントを投稿

◇コメントスパムと判断しましたらサックリ削除いたします。ご了承ください。

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

おしらせ
  • このサイトの更新を停止いたします。詳細は「更新停止します」の記事に書いてありますのでそちらをご覧ください。
    日記サイトpi:s、WordPressのカスタマイズをメモしておく
    WordPress*Memoはこっそり更新していきます(`・ω・´)
    今までありがとうございました。-りぃ-
blog status
  • 利用中サーバー
  •  エックスサーバー
  • 利用中ドメイン登録代行サービス
  •  VALUE-DOMAIN

  • 記事数 : 51
  • コメント数 : 207
  • トラックバック数 : 53
  • カウンターカウンター
    カウンターカウンター カウンターカウンター
  • お気に入りに追加
  • track feed