仕事で使っているMovableType(4.292)で、一つ問題が発生し、解決したので覚書。
(書き留めておかないと自分で忘れてしまうので)
MTカスタムフィールドで日付型を使用しているとき、日付欄を空欄にしても、空欄と認識してもらえません。
例えばイベントの開催期間を表示するのに、終わりが決まっていない場合、終了日のフィールドを空欄にしても、終了日の欄は1970年1月1日という日付が入ってしまいます。(表示形式はフォーマットによります) どうやら日付型の初期値らしいです。
こういう時、「○月×日~」のように終わりの日付を表示しないようにするには、ちょっと仕掛けが必要です。
開始日のフィールドを「DateStart」、終了日を「DateEnd」として、
<mt:setvarblock name="dateend">
<$MTEntryCustomFieldDate field="DateEnd" format="%Y%m%d"$>
</mt:setvarblock>
<p>
<mt:if tag="DateStart">
<$MTEntryCustomFieldDate field="DateStart" language="ja" format="%Y年%b月%e日(%a)"$>
</mt:if>~
<mt:if tag="DateEnd">
<mt:if name="dateend" eq="19700101">
<mt:else>
<$MTEntryCustomFieldDate field="DateEnd" language="ja" format="%b月%e日(%a)"$>
</mt:if>
</mt:if>
</p>
のように、終了日が空欄だった場合の日付、1970年1月1日を日付フォーマットを使って文字列化し(私は一番簡単に、YYYYMMDDになるようにしました)、SetVarBlockで変数に格納します。その上で、終了日付が1970年1月1日の場合は表示せず、それ以外の日だった時に日付表示をする、という指示を出します。
最初はシリアル値で指定できないかと思ったのですが、MTの場合は日付フォーマットを指定して出すのが基本のようなので。
本来なら、終了日が開始日の前にならないように、開始日より終了日の方が古い日付の時は、のような条件の方が汎用性が高いのでしょうが、こちらは変数指定などがより複雑になりそうだったので。
でも、開始日の方も日付を文字列にして変数指定すれば、2つの数字の比較でなんとかなりそうですね。
とりあえず、これで当面私のやりたかったことはできたので。
また何かあった時のための覚書として残しておきます。