PHPerのための Movable Type 講座(その4)

| コメント(0) | トラックバック(0)

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

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/803

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2014年4月15日 14:05に書いたブログ記事です。

ひとつ前のブログ記事は「ITのクラウド化と広告(印刷・出版)のWeb化で起こっていることが何だか似ているかもしれない件」です。

次のブログ記事は「PHPerのための Movable Type 講座(その5)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6