top

静的用カスタマイズと動的用カスタマイズの共存

PHPizeプロジェクトのコメント欄で「静的用・動的用カスタマイズの互換性」の話をしていて、ふっと思い出したことがあります。

待てよ。再構築オプションの違いによって使い分けられるタグ、なかったっけ?
思い出した! これだっ!!

<MTIfStatic><MTIfDynamic>

先の本のエントリーを書いた時は使い道が思い浮かばなかったんですが、まさに静的・動的間の互換性問題にピッタリではないですか!

使用例

<MTIfStatic>
スタティック用プラグインタグ
</MTIfStatic>
<MTIfDynamic>
Smartyコード
</MTIfDynamic>

とテンプレに書いてあげれば、性質の違う静的プラグインとSmartyテクニックを1つのテンプレートで共有できるではないですか! これならSmarty頁分割とMTPaginateを同時使用できますねっ。静的生成の時はMTPaginateが使われて、ダイナミックで動かしている時はSmartyが動作するように自動切り替え出来ます、と。

あまり一般的なテクニックではないですが、こういう機能が必要な人にはすごく重宝するんじゃないかと思います。ということで、私も必要が生じたら使ってみようと思います。

 

コメント

確かにそんなタグありましたね。
でも、どうなんでしょうか。意外と使いこなすのは難しいかも。
テンプレ書いててよく躓くのに、「条件タグ内は出力されないが、評価は行われる」というパターンがあります。<MTIfStatic>がどの様に動作するか解りませんが、プラグイン依存を書いちゃうとエラーが出たりしそうですね。

試してみました。
結果はみごとに使い分けられました!

静的用Perlプラグインの記述を <MTIfStatic>~</MTIfStatic>で囲んだところ、ダイナミックではその部分は無視して出力されました。FilterCategories、Counter Plugin、MultiBlogの3つのプラグインで試してみましたがエラーも出ませんでした。

Smartyの部分も<MTIfDynamic>~</MTIfDynamic>で囲むと静的生成時には無視されます。よって1つのテンプレートで静的用・動的用両方のカスタマイズを書いて共存させることが本当に出来ました。

ただ、テンプレの記述がやたら長くなるので使いどころはよく考えた方がいいでしょうね(^^;。

そうですか、中身はパースされないんだったら使えますね。MultiBlogはダイナミック・パブリッシング対応してるけど、FilterCategoriesとCounter Pluginは、スタティックのみですもんね。
今までさんざん、条件タグでつまづいてきたもので、ちょっと疑り深かったりします・・・
>テンプレの記述がやたら長くなるので
長いのが良いか、多いのが良いかですね。

このタグは再構築オプションの設定で判断されるものなので、そういう作りになってるのかもですね。
便利なのは確かです。

>記述の長さ
静的・動的別に同じものを2回書くとその分冗長になってしまいますよね。
やっぱり理想は同じタグで静的・動的共用できることですが、それが出来ない間のいい味方になってくれそうなので、用途に応じて判断して使っていけばいいでしょうね。

技術情報。
これらのタグは実際、「そういう作り」になっています。
<MTIfDynamic>は、スタティックでは「中身をパースせず何も実行しない」ようにできています。
また<MTIfStatic>は、ダイナミックパブリッシング時、MTのテンプレートをSmartyのコードに変換する際にばっさり削除される仕様になっているので、やはりパースされることがありません。
ちなみに、今日もまだ会社です(汗)

>あんちもん2さん
いつもお世話になっております!
詳しく教えて下さってありがとうございます。おかげで安心してタグが使えます。^^
ダイナミック派には想像以上に使い勝手がありそうで嬉しいタグですね。
お仕事もお疲れ様です~。