MovableType:ダイナミックにおけるmtview.phpのカスタマイズ方法
MovableTypeのテンプレートを「ダイナミック」にすると、ダイナミックパブリッシング(動的生成)が有効になり、ブログ直下に「mtview.php」が配置されます。
このmtview.php にリクエストの全てが集められるため、URLによって処理を変えるといったことができれば多彩なことができるわけですが、よく分からない人も多いでしょう。
そこで簡単ではありますが、別のPHPファイルを事前に読み込ませて、MovableTypeテンプレート内で出力するというテクニックを紹介します。
mtview.phpのオリジナルファイル
今回、いじってみるmtview.phpはこちら。
include('/path/to/mt/php/mt.php'); $mt = MT::get_instance(7, '/path/to/mt/mt-config.cgi'); $mt->view();
PHPを理解している人は分かりやすいですが、blog_id に「7」を指定して $mt を生成し、view() メソッドを実行しています。 これだけで全てのページの出力処理が行われてるんですね。
ポイントは出力前にいろいろやってしまうこと
さて、MovableTypeが view() でページを出力してしまうとあまりいろいろできなくなってしまいますから、ポイントは view() の前にカスタマイズ用の処理を書いてしまうことです。
例えば、別のPHPファイルを読みこませる場合は、直前に include_once() で自作PHPファイルを読み込ませます。
include('/path/to/mt/php/mt.php'); $mt = MT::get_instance(7, '/path/to/mt/mt-config.cgi'); include_once('/path/to/customize.php'); $mt->view();
自作PHPファイルの中で $mt の中にある Smarty を取り出し
突然ですが Smarty はご存知でしょうか? 知らない? それは勿体無い。 ぜひ学んで身につけてください。
なぜかというと、ダイナミック出力モードになったMovableTypeでは Smartyを使ってページ出力しているからです。
そのSmartyのインスタンスを取り出す方法がこれ。 customize.phpに書きます。
$ctx =& $mt->context();
この$ctx が Smartyインスタンスです。 これに assign() メソッドを使って好きな変数を埋め込むことができます。
$ctx =& $mt->context(); $ctx->assign('greeting', 'おはよー!');
とりあえず テンプレート側で「$greeting」として使える挨拶文を設定してみました。 ではこれをMovableTypeテンプレート側で使ってみましょう。
設定した変数を使う場合は{{…}} で囲む
MovableTypeで使われているSmartyではデリミタ(区切り文字)が通常の {…} ではなく、{{…}} になっています。 中括弧2つで挟んで使うんですね。
ですから、設定した変数 $greeting をMovableTypeテンプレートで使う場合も次のようにします。
{{$greeting}}
この他にも、中括弧2つで括るルールであれば、Smartyで利用できる全ての機能を利用することができるのでとても便利ですよ!
2012-06-01