MovableType ダイナミックパブリッシングとPHPの変数のやり取り
MTの話題はというと、最近はMT6のdataAPIの話題が多くて、すっかり私は周回遅れです。
でも、マイペースでやる方が自分にはあっていると思うので、過去のいろいろな記事を参考に、気づいたことを書いていきたいと思います。
今回は、MTのダイナミックパブリッシングについて。
MTでダイナミックパブリッシングをする場合、せっかく動的にページを作成しているので、MTタグに動的な(PHPの)変数の値を与えたいことがあります。
ダイナミックパブリッシングで、MTの変数の値をphpに渡す場合は、
http://gabs.cc/blog/bun/topic20121219-1028.php
でcaptureを使う方法が紹介されていました。
また、DynamicMTMLを使う場合、双方向のやり方は、
http://junnama.alfasado.net/online/2012/12/mtphp.html
で紹介されていました。
では、通常のダイナミックパブリッシングで、phpの変数の値をMTの変数として引き渡すには?
いろいろと試してみたのですが、こんな感じで書けばできました。
{{php}}
$this->_tag_stack[] = array("mtvar" , array( 'name' => 'message' , 'value' => 'nice', ));
echo smarty_function_mtvar( array('name'=>'message','value'=>'nice'), $this);
array_pop( $this->_tag_stack );
{{/php}}
上記は、MTタグでいうところの
です。
というか、このMTタグがphp化(smarty化)されると、上記のようになってました。
valueの値が2回設定されているのは不思議ですが、2回目の値が実際には有効になるようです。
[追記:2013/9/11]
この記事を書いた後、野田さんのブログにもっと簡単に出来る方法が書いてあったので、以下を試してみました。
http://junnama.alfasado.net/online/2013/09/mt_this_ctxclass_mtviewer.html
$this__stash['vars']['変数名']でアクセスする方法を試してみると、
{{php}}
$this->__stash[ 'vars' ][ 'text' ] = "Good Night!";
{{/php}}
確かにこれでtextに「Good Night!」が登録されてました。これは簡単!
また、{{php}}〜{{/php}}というsmarty記法ではなく、という通常のphp形式で記述しても同様に
動作していました。ちなみに、テスト環境はMT 5.2.7です。