アルファサード株式会社 代表取締役 野田 純生のブログ


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へと、続く(かも)



このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の創業者であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ