PHPerのための Movable Type 講座(その4)
公開日 : 2014-04-15 14:05:39
PHPerとひらぱーって発音似てる? (違)
前回までで、Class MTDatabase編が終ったので、続いてテンプレートエンジンの部分的な? 利用方法をご紹介します。
ヒアドキュメントの中にMTのテンプレートを書いて、PHPのコード中からビルドする方法。mtevalモディファイアを使うのが簡単なので、ここではmodifier.mteval.phpをrequire_onceして、そのままテンプレートを渡しています。
参考リンク: MTタグとphpで変数の受け渡しをする。 - Junnama Online
<?php
$blog_id = 1;
include('/path/to/mt/php/mt.php');
$mt = MT::get_instance( $blog_id, '/path/to/mt/mt-config.cgi' );
$ctx =& $mt->context();
$ctx->caching = FALSE;
$blog = $mt->db()->fetch_blog( $blog_id );
$ctx->stash( 'blog', $blog );
$ctx->stash( 'blog_id', $blog->id );
$ctx->__stash[ 'vars' ][ 'foo' ] = 'bar';
$tmpl = <<< EOM
<pre>
<mt:var name="foo">
<mt:BlogURL setvar="blog_url">
<MTBlogName>
<MTEntries include_blogs="children">
<MTEntryTitle>
</MTEntries>
EOM;
require_once( 'MTUtil.php' );
require_once( 'modifier.mteval.php' );
$contents = smarty_modifier_mteval( $tmpl, TRUE );
echo $contents;
echo $ctx->__stash[ 'vars' ][ 'blog_url' ];
?>
実際に生PHPのコードの中にテンプレートを書く必要があるのかといえば疑わしいというか、意味がないように見えますが、.htaccessなんかで、URLリライトしてファイルへのリクエストをこのphpに渡して、ファイル中のMTタグを解釈するようにすれば、簡易DynamicMTMLというか、そういう使い方もできますね。MTタグがかかれたテンプレートがView、php が Controllerです。
以前に書いた、MTCakeや、WordPressプラグインなんかは、要はこういうことでPHPでデータベースアクセスしてコンテキスト($ctx)にセットして、MTタグでそれを取り出すような例ですね。
PHPからデータベース接続さえできれば、テンプレートエンジン部分のみMTを利用する、といった使い方ができます。
ちなみに、この、$ctxは ファイルmt//php/lib/MTViewer.php で定義されています。
<?php
include_once("Smarty.class.php");
class MTViewer extends Smarty {
MTViewer extends Smarty、つまり、MTのダイナミックパブリッシングはSmartyを拡張したクラスになっています。なので、ダイナミックパブリッシング用のテンプレートタグは、Smartyのプラグインとして作成できるようになっているのですね。
タグの作り方、DynamicMTMLへと、続く(かも)