top

ダイナミック・パブリッシングを使いこなすコツ

ダイナミック・パブリッシングは再構築が要らないため、再構築時の重さがなくなり(全頁を再構築しても5秒くらいで終ります)エラーとも無縁になれる素晴らしい環境なのですが、情報が少ないため誤解や間違った解釈をされることがままあるようです。ここではダイナミックの「その噂ウソ?ホント?」を検証しながらダイナミック・パブリッシングを使いこなすコツを探っていきたいと思います。

1.バグがあるってホント?
2.PHPによるモジュール化ができないってホント?
3.Perlのプラグインが使えないってホント?


1.バグがあるってホント?
ダイナミック・パブリッシングも出始めの頃はいくつかバグがありましたが、3.17辺りで実用に差し障るようなバグはほぼ一掃されたと見てよいと思います。時々バージョンアップ後に以前は正常だったものがおかしくなるということもありますが、その手のバグは静的生成でもあるので、ダイナミックだからどうこうということはないと思います。Six Apartも2006.7からはバグ報告フォームを用意してくれているので、気付いたバグはどんどん報告して改良してもらえばいいので、気にすることはないと思います。(3.32で生じたバグはこちらの方法で修正できます)

<一言ポイント>
ダイナミックでは動かなくても静的生成なら正常という場合は、バグのある箇所だけ静的生成にして<$MTInclude$>で読み込む方法で解消できます。


2.PHPによるモジュール化ができないってホント?(2009.12.27改編)
これはウソです。
実はダイナミック・パブリッシングはPHPのSmartyで動いているので、Smartyのコードを書くことによってテンプレート内でPHPプログラムを動かすことが出来ます。また、Smartyの組み込み関数{{php}}を使えば、PHPのコードを直接テンプレートに書くことも可能です。従ってダイナミック・パブリッシングでもPHPによるモジュール化は出来ます。

そもそもが拡張子をphpにしてブログの各パーツを部品化しPHPのモジュールで読み込むという方法は、静的生成時の再構築負荷を減らすのが目的なんですよね。しかしダイナミック・パブリッシングは動的生成ですから再構築時の負荷がほとんどなく、PHP化自体必要としません。ですので、再構築の負荷を減らすことだけが目的なら、静的生成時と同様のPHPモジュールが出来るかどうか問うこと自体あまり意味がないことのように思います。
とはいえ、静的ファイルをモジュールとして読み込むのはダイナミックでの頁表示時の負荷を減らす効果はありますので(後述のポイントも参照)、PHP化した静的サイトをモジュール化を保ったままダイナミックへ移行する方法を以下に述べておきます。

<PHP化サイトをダイナミックへ移行する際のポイント>
PHPモジュール化している部分は、該当箇所を以下の方法で書きかえることで、モジュール化を保ったままダイナミックへ移行することが出来ます。

1)MTIncludeを使う(推奨)

<$MTInclude file="ファイルのアドレス"$>

<$MTInclude$>タグは静的生成時とダイナミック時では振る舞いが違うので、ダイナミック時は<$MTInclude$>タグでphpモジュール化と同じ効果を得ることが出来ます。なお、<$MTInclude$>の中でMTタグを使いたい場合はこちらの方法を参考にして下さい。

2)Smartyを使う

{{fetch file="ファイルのアドレス"}}

これはSmartyで外部ファイルを読み込むためのコードで、<?php readfile("ファイルのアドレス"); ?>と同じ働きをします。
ファイルのアドレスにMTタグが使われている場合はこちらの方法を参考にして下さい。

3)PHPのコードをそのまま生かす
<?php と ?>を{{php}}と{{/php}}に置き換えるだけでPHPコードをそのままダイナミックで使えます。

{{php}}
readfile("ファイルのアドレス");
{{/php}}

<注>{{php}}~{{/php}}内ではMTタグは使えませんので、MTタグを併用したい場合はMTIncludeかSmartyを使って下さい。

ちなみに、拡張子を.phpにするPHP化と、ダイナミック・パブリッシングは全く別のものです。ダイナミックパブリッシングはPHPで動いていますが、拡張子はhtmlのままで使えます(わざわざphpに変える必要はありません。いえ、変えても使えますけど、あまり意味はないかと…)。「ダイナミックパブリッシング」と「PHP化」を混同しないようにご注意下さい。


3.Perlのプラグインが使えないってホント?
これも半分ウソ。確かにダイナミック・パブリッシングにはPerlのプラグインが使えませんが、Perlのプラグインを使いたい箇所のみ静的生成にすれば何も問題はありません。「ダイナミックでPerlのプラグインが使えない=ダイナミックを取り入れた頁でPerlのプラグインが使えない」ではないのです。「ダイナミック頁でもプラグインの箇所のみ静的生成にすることによってPerlのプラグインは問題なく使えます」が正解。

プラグインを使いたい部分を別パーツにして、「メインインデックスのテンプレート」で「新しいテンプレート」として作成します。○○.htmlなどと好きな名前をつけて保存・再構築します。この○○.htmlはダイナミックのチェックを外して静的生成されるようにしておきます。それをブログの表示させたい箇所に
<$MTInclude file="○○.html"$>
というタグを書いて、MTのインクルード機能で読み込めばOKです。こうすればダイナミックでもいくらでも好きなだけPerlのプラグインが使い放題ですよ~。お試しあれ。

<注:MT4.38以上をお使いの方へ>
MT5.13、5.07、および4.38以降のバージョンではfileモディファイアが標準で無効化されています。fileモディファイアを使うにはmt-config.cgiに以下を追記します。

AllowFileInclude 1

<ポイント>
サイドバーなど共通の部分にプラグインスペースをまとめて設けて、動的頁から読み込むようにすると、動的頁が生成される際には、既に出来上がっているHTMLを読み込むだけでよくなるので(その度にトラックバックやコメントをいちいち構築しなくてよくなる)、ダイナミック時のMTの負担も減ることになり、その分頁表示も更に速くなります。サイドバーは1つあれば1回再構築されるだけですから、ダイナミックの良さへの影響はありません。共通の部分は静的生成にして動きの負担を減らすというのはPHPのモジュール化と考え方に共通するものがありますね。

<追記~MT4以降の実態>
さらにMT4からは変数が使えるようになり、MTタグだけでプログラム的なことも出来るようになりました。従来プラグインで提供されてきた機能がMTタグだけで実装出来るようになってきているので、MT4・5時代ではPerlのプラグインが使えなくても特に問題ないところまできていると思います。


■おまけコラム

ダイナミックへの誤解(1)~プラグインの罠
実は私自身、つい最近までこの罠にはまっていました。。。
例えば人気の「頁分割」ですが、さすがにこればかりは↑の3の方法が使えないので、Perlのプラグインが使えないダイナミックは頁分割が出来ないものと思い込んでしまっていたのです。でもそれは間違いでした。
「Perlのプラグインが使えない=頁分割が出来ない」じゃなくて、
「Perlのプラグインによる頁分割は出来ない」が正しかったのです。
つまり、Perlのプラグインじゃない、別の方法でなら、ダイナミックでも頁分割は出来たのです。それもすごく簡単に。

ある1つの方法が使えない=その方法が目的としている機能が使えない

ではありません。方法はあくまでも手段であって目的じゃない。その手段が駄目なら別の手段を使えばいいだけのこと。カレンダーも問題なく表示でき、ダイナミックでも頁分割ができることが分かった今、ダイナミックで出来ないことなんて何もないじゃないかというのが実感です。よく調べもせず聞きかじりの情報を鵜呑みにしたりしないよう注意して、冷静に判断できる力を身につけていきたいと思います。

ダイナミックへの誤解(2)~ダイナミックはSmarty
これも最近まで気が付かず「PHP」という言葉の罠にはまっていたものです。
ダイナミック・パブリッシングはPHPで動いていますが、そのベースになっているのはPHPはPHPでもSmartyという仕組みです。だからダイナミック・パブリッシングではSmartyのコードが使えます。Smartyの法則に従えば、PHPのコードを直接テンプレートに書いて動かすことも出来ます。つまり、そのシステムにあったコードの書き方をすればいいだけの話だったわけで。

Smartyを使えば静的生成ではプラグインが必要なカスタマイズもプラグインなしで実現できてしまいます。これに気が付けばダイナミックの可能性もさらに大きく広がります。

(2006年9月9日改編)
(2006年12月16日改編)
(2009年12月26日大幅改稿)
(2014年10月20日fileモディファイアの注意追加)
*この頁は状況により随時加筆修正されることがあります。

 

トラックバックの一覧

トラックバック Movable Typeでダイナミック・パブリッシング  »» 2007年4月13日 16:32
はじめにでも少し述べましたが、当ブログではサイトマップ以外のページはダイナミック・バブリッシング(動的生成)によりページを表示させております。このダイナミ...

コメント

>> 3.Perlのプラグインが使えないってホント?

ありがとうございました!
大変参考になりました!

参考にしていただけたようで嬉しいです。
私もダイナミックで動かしている頁に3つもPerlのプラグイン入れてます。
ダイナミックでもプラグイン、どんどん活用して下さいね。^^