Movable Typeのダイナミックパブリッシングで
PHPコードを書くときにハマったこと

毎度ながら、すっかりご無沙汰なBUNです。
みなさんお元気ですか?(。-_-。)

小ネタはストックしてあるものの重い腰がなかなか上がらなかったのですが、Movable Type Advent Calendar 2012 の19日目の記事として、半強制的に書くことにしました。

文体すら忘れかけてるので、サクッと短めに www

さて、先日「スタティック」として実装済みのテンプレートを「ダイナミックパブリッシング」に変更する必要に駆られました。導入しているプラグイン自体の影響を受けることは考えられなかったため、当初「公開を切り替えるだけで大丈夫だろう」と思っていたものの、実際に設定してみると出力先のURLは真っ白に。。。

調べてみたところ、テンプレート内にPHPのコードを記述していたのが原因でした。
このとき初めて知ったのですが、ダイナミックパブリッシング用のテンプレートにPHPのコードを書く場合は、Smartyの記法で書かないといけないのですね。

という訳で、下記のように変更したところ、とりあえず真っ白な画面ではなくなりました。
Movable Typeでは、Smartyのデミリタが2重の中括弧になります。

変更前のコード
<?php include('header.php'); ?>
変更後のコード
{{php}} include('header.php'); {{/php}}

次に問題になったのが、PHPの変数に直接MTタグを代入している箇所でした。

前述のように{{php}}{{/php}}で囲むだけではダメで、一旦captureにセットしてからget_template_vars関数でPHPの変数に代入できました。

変更前のコード
<?php $title = '<$mt:EntryTitle$>'; ?>
変更後のコード
{{capture assign="entry_title"}}<$mt:EntryTitle$>{{/capture}}
{{php}}$title = $this->get_template_vars('entry_title');{{/php}}

これまでダイナミックパブリッシングをなんとなく避けてきたBUNでしたが、
これくらいの調整で済むのであれば、使い出がありそうかなと。

ファイルの読込でMTIncludeを利用してないのは「大人の事情」ということで(。-_-。)

コメントフォーム

トラックバック(0)

トラックバックURL : https://gabs.cc/mt/mt-tb.cgi/tb
※お手数ですが、上記URLの「tb」を「59」に置き換えてPingを送信してください。