mt:ifStaticとmt:ifDynamicは似て非なる物。

自分は、今見ているテストページがスタティックパブリッシングとダイナミックパブリッシングのどちらによる出力なのか、一目で分かるように、以下のような表示をさせておくことがあります。

このテンプレートは<mt:ifDynamic>ダイナミック<mt:else>スタティック</mt:ifDynamic>で構築されました。

いくらPerl弄っても動作が直らないと思ったらPHPのほうに問題があった。何を言ってい(ry等と言うことにならないためですね。

さて、ここでちょっとした罠があります。mt:ifDynamicと対になるようなテンプレートタグmt:ifStaticでは、このような書き方は出来ません。

このテンプレートは<mt:ifStatic>スタティック<mt:else>ダイナミック</mt:ifStatic>で構築されました。

上記テンプレートは、スタティックでは期待通りに動きますが、ダイナミックでは以下のような出力になってしまいます。

このテンプレートはで構築されました。

原因は、mt:ifStaticタグのPHPでの実装が、テンプレートタグとしてではなく、コメント(のような)扱いになっているためです。
<mt:ifStatic>・・・</mt:ifStatic>の部分が、再構築より前に強制的にテンプレートから削除されてしまうんですね。なので、その中に何個mt:elseを書こうが、全部消えてしまうわけです。mt:ignoreと同じですね。

これはおそらくダイナミックパブリッシングでは、ページビューごとに構築が行われるため、より細部の高速化を重視しているものかと思われます。mt:ifStaticとmt:ifDynamicで非対称な動作となっているのでちょっと違和感がありますが、上手く使い分けると良いと思います。