モンスターカレンダー

« 2008年8月 »
12345678910111213141516171819202122232425262728293031

2008年8月17日アーカイブ

イベントなどが終了したら表示を変えたい。よくあることです。
これを、php化したMT4でやってみました。

エントリー時に終了日時をあらかじめ入れておきます。
アクセスした時に、これを過ぎていれば終了と表示を出すことにします。

終了日時はカスタムフィールドで記入するようにします。
今回は時間はなしで、簡単に年月日だけで比較することにします。

設定を日付と時間にしたんですが、こうするとformat="%Y%m%dなどが効かないので、
表示は2008年8月15日というようになってしまうため、日付の比較ができません。
(実はこれがわからずかなり悩んだ)

テキストにして20080815などと入れてもらってもかまわないのですが
それじゃあんまりなので、ちょっと面倒ですがドロップダウンを使用しました。

年、月、日ごとにカスタムフィールドを設定します。
月日は全部二桁で01、02とします。

各フィールド名をDateY、DateM、DateDとします。


<?php
$enddate = ('<$MT
DateY$><$MTDateM$><$MTDateD$>'); //申込終了日時を取得
$today = date(Ymd); // 今日の日付を取得
if( $enddate >= $today )
print <<< EOD
終了前に表示したい内容
ここはインデントしないで
ここはインデントしないで
EOD;
}
else {
{
print <<< EOD
終了後に表示したい内容
ここはインデントしないで
ここはインデントしないで
EOD;
}
?>

このような感じです。

一応説明をば。

$enddate = ('<$MTDateY$><$MTDateM$><$MTDateD$>');
$enddateという変数に終了の年月日を入れています。
終了年月日=20080815

$today = date(Ymd);
今日の日付をdate関数で取得しています。Ymdで年月日を取得
今日=20080817

if( $enddate >= $today ) 
20080815と20080817どちらが大きいかを比較しています。
この場合、今日の日付の方が大きいのでelse以下、つまり終了後の
内容を表示するということになります。
もし、終了日と今日の日付が同じ場合は終了後の表示になります。
同じ場合は終了前にしたいときは「>=」の部分を「>」だけにしてください。

表示したい内容が短いものの場合は

print <<< EOD
終了前に表示したい内容
ここはインデントしないで
ここはインデントしないで
EOD;

ここを

print "短い文章";

としてもOKです。

ちなみに「ここはインデントしないで」の理由などは
http://nyx.pu1.net/reference/basic/character.html
なんかを見るとわかりやすいと思います。




これであってるよな......と、心配で何度も読み返す。
自分への覚え書きとして。

MT4に新設されたカスタムフィールドですが、普通は
<MTIfNonEmpty tag="EntryData">
カスタムフィールドの名前: <MTEntryData>
</MTIfNonEmpty>
としますが、これだと、チェックボックスの場合は
チェックしていてもしなくても表示されてしまうのでどうしてだろうと思っていたら、
チェックボックスに関してはチェックされている時「1」を表示し、
チェックされていないとき「0」を表示するんですね。
というわけで、
<MTIfNonZero tag="EntryData">
表示させたいもの
</MTIfNonZero>
となるわけです。

ちなみに、ラジオボタンやドロップダウンの場合はオプションが出るので
そこに項目を書いていけばいいのですが、チェックボックスの場合は
説明の部分に書いたことが、チェックボックスの横に表示されます。