website 右肩上がり


Not Daily Diary - Individual Archive -

Home > Not Daily Diary > Individual Archive

MovableTypeのダイナミックパブリッシングでPHPを使う

コメントする  >

ニッチな内容ですが、他にも同じ情報を探している人がいるかもしれないので書いてみました。2011年5月現在、オレが使っているMovable Typeのバージョンは4.2xです。

Movable Typeはダイナミックパブリッシング(動的生成)を行うためにSmarty(PHP)というテンプレートエンジンを使っています。「本体をPerlで書いてるんだから全部Perlにすりゃいいのに!」というのはひとまずおいときましょう。
で、ダイナミックパブリッシングで運用するとSmartyの初期設定が邪魔をしてMTのテンプレートに書いたPHPのコードが実行されません。

とりあえずテンプレート内のPHPコードを実行可能にする

これをクリアするのは割と簡単で、Smarty実行時に参照される環境変数の値を変更するだけで実行が可能になります。環境変数は、

MTインストールディレクトリのphp/extlib/smarty/libs/Smarty.class.phpに書かれています。
この中の環境変数

var $php_handling    =  SMARTY_PHP_PASSTHRU;

var $php_handling    =  SMARTY_PHP_ALLOW;

と書き換えてやれば、テンプレート内に書いたPHPコードの実行が可能になります。

ファンクションタグの値をPHPで使う

さて、ダイナミックパブリッシングでPHPコードが動くとなればファンクションタグの値を取得してコネコネしたくなるってもんですが一筋縄では行きません。スタティックの場合は簡単に出来るんですけどね。
が、一手間かけたらあっさり出来てしまいました。ファンクションタグの値をSamrtyの変数に入れてそれをPHPコードから参照するという方法です。

まずはファンクションタグの値をSmartyの変数に入れる方法。エントリーIDを例にしてみます。

{{capture assign="entryID"}}<mt:entryid>{{/capture}}

これでentryIDというSmarty変数にmt:entyridの値が格納されました。
次はPHPコードで変数$entryIDに先ほどのSmarty変数入れてみます。

<?php
$entryID = $this->get_template_vars('entryID');
?>

こうする事でダイナミックパブリッシング運用時にPHPコード内でファンクションタグの値を参照して利用する事が可能になります。ただ、グローバルテンプレートなんかに切り出してしまうとエラーになります。(どういうケースでエラーになるかは確認していません)

込み入った事をやるのは気が引けますが、エントリーの日付を取得して「Update」とか「NEW!」なんて表示したり、ある程度の期間が過ぎたエントリーのコメントフォームを非表示にするとか、ちょっとした小技が使えるようになります。
プラグインを使う・作る、Perlでカスタマイズする方法もありますが、テンプレート内にちゃちゃっと書いてしまえばある程度の機能を実現できるのでこういう選択肢もありかなと思います。

前のエントリー : 

Comment

コメントはありません

コメントの受付は終了しました

このページの先頭へ



| Home | Not Daily Diary | Travel | Labo | Contact | Profile |

Copyright© 2002-2018 migikata-agari.com , All Rights Reserved. | POWERED BY MOVABLE TYPE®