MTで指定時間になったら自動的にカスタムフィールドの内容を書き換えて再構築できないか。

()

結論から言うと、これは出来ないみたいなんですが、別のやり方でほぼ同等のことが可能でした。


ちなみに、シックスアパート社に機能要望フィードバックをしてみたら、Power CMS for MTを紹介されたので、これを使えば表題の処理が出来るのかもしれませんが、紹介されただけで特にできるかどうかの説明はなかったんで実際はどうなんですかね...。

 

表題の処理をしたいときっていうのが、特にイベント情報的なブログの場合です。


イベントは当然開催期間があるわけで、ブログ記事一覧などで、開催中のイベントであれば「開催中」と表示し、終了したのであれば「終了しました」などといった風に表示を切り替えたいわけです。


カスタムフィールドのドロップダウンもしくはラジオボタンを使って、例えば「開催中」、「まもなく開催」、「終了しました」みたいなものを作り、クライアントに選択してもらうというのもいいんですが、これだと手間です。


表示の切り替えをし忘れて、ユーザーからクレームが来る可能性も出てきてしまいます。


なので、自動的にカスタムフィールドの内容が指定時間に切り替わり、再構築してくれたらいいんだけどなと思ってGoogle先生に尋ねても、全く目ぼしい記事が見当たりませんでした。


ただ、一つ参考になる記事があって、違うやり方で解決の糸口を見つけることができました。

MT4 カスタムフィールドで日時を取得 - SOHOカアチャン通信

 

この記事の内容を応用させてもらい、2つのやり方をメモ。

 

まずカスタムフィールドを6つ作ります。

 

  • イベント開催日の年(テキスト) <$MTEventStartYear$>
  • イベント開催日の月(ドロップダウン)<$MTEventStartMonth$>
  • イベント開催日の日(ドロップダウン)<$MTEventStartDay$>
  • イベント終了日の年(テキスト)<$MTEventEndYear$>
  • イベント終了日の月(ドロップダウン)<$MTEventEndMonth$>
  • イベント終了日の日(ドロップダウン)<$MTEventEndDay$>

 

スタティックパブリッシングで対応する場合

PHPを使用します。表示を自動的に切り替えたい部分に以下のような感じのソースを入れます。

ここでは、「開催中」、「まもなく開催」、「終了」の3パターンでの表示を想定しています。

<?php
$startdate = ('<$MTEventStartYear$><$MTEventStartMonth$><$MTEventStartDay$>');
$enddate = ('<$MTEventEndYear$><$MTEventEndMonth$><$MTEventEndDay$>');
$today = date(Ymd);

if($startdate <= $today && $enddate >= $today){
print <<< EOD
ここに開催中のとき表示させたい内容。
例えば
開催中
EOD;
}else if($enddate > $today && $startdate > $today){
print <<< EOD
ここにまもなく開催中のとき表示させたい内容。
例えば
まもなく開催
EOD;
}else{
print <<< EOD
ここに終了のとき表示させたい内容。
例えば
終了
EOD;
}
?>

いたってシンプルな論理です。


$startdateにはイベントの開催日が

20100523

のような感じで入ります。

 

$enddateにはイベントの終了日が

20100530

のような感じで入ります。

 

$todayにはアクセスした日が

20100525

のような感じで入ります。

 

これらの数値の大小を比較しているだけ。

 

if( $startdate <= $today &&  $enddate >= $today )の部分であれば、

 

もしアクセスした日がイベント開始日より後(大きい)か同じ日で、かつ、ア クセスした日がイベント終了日より前(小さい)か同じ日であれば開催中表示ということになります。

 

このやり方をする場合は、ファイルの拡張子を.phpに変えることを忘れずに。


記事ページでも使用する場合は、「設定」→「全般設定」→「アーカイブ設定」からファイルの拡張子を.phpにも変えます。

 

 

ダイナミックパブリッシングで対応する場合


phpを使用しなくともMTタグだけで実現可能でした。

 

<$MTEventStartYear$><$MTEventStartMonth$><$MTEventStartDate$>
<$MTEventEndYear$><$MTEventEndMonth$><$MTEventEndDate$>
<$MTDate format="%Y%m%d"$>



ここに開催中のとき表示させたい内容。
例えば
開催中





ここにまもなく開催中のとき表示させたい内容。
例えば
まもなく開催





ここに終了のとき表示させたい内容。
例えば
終了


 

ロジックはphpで書く場合と全く同じです。

 

論理演算子がMTにはないみたいだから(あるの?)、やや冗長になります。

 

  

以上のような感じですね。


こういうのはCMSがなかったら大変なことになってしまいそう。

戦意

© 2012 戦意