久しぶりに Movable Type のことを備忘録を兼ねて少しだけ…

この記事をフルスクリーンで見るフルスクリーンモードを終了するには Esc キーを押してください。または、ココをクリックしてください。

Movable Type がリリースされて、2012年10月8日で11周年なんだそうな。
2004年くらいから使い始めて今でも仕事で使っていますので、7〜8年ほど使っていることになるのかな。

で、最近の仕事で気づいた事を少しだけメモ。

企業サイトのコンテンツのひとつに展示会に出展する際のイベントカレンダーのページがあり、 Movable Type を使ってクライアント側で更新作業をしたいと…
まぁ、よくある話。
もちろん、それだけのために Movable Type を使うわけではないのですが、中には「ニュース(お知らせ)だけを Movable Type で制作して欲しい。」という依頼もあったりします。
まぁ、「もったいないなぁ」と思ったりするのですが、中の人が『今すぐできる超絶シンプルなMTのCMSカスタマイズテクニック』という記事を書いているくらいなのでその影響かもね :-)

今回のイベントカレンダーでは、『イベントが終了したらその旨を表示したい。』という要望がありました。
どのバージョンの Movable Type からなのかは忘れましたけど、変数を使って四則演算ができるようになりましたので、MTタグで記述するはそれほど難しくない。
今日の日付とイベント終了日を比較すれば OK 。
ですが、 Movable Type には、今日の日付を取得する MT タグが見あたらない。
Twitter でつぶやいてみたけど、やはりなさそう…
なので、GetDate プラグインをインストール。
イベントが1日だけとは限らないので、イベント終了日の記入にカスタムフィールドを使用。
しかし、カスタムフィールドで『日付と時刻』を選択すると表示書式を変更できません。
要するに『format モディファイア』が使えません。
ということで、CustomFieldDate プラグインをインストール。

プラグインを2つインストールして、テンプレートに記述したのが下記。

<mt:SetVarBlock name="today"><mt:Today format="%y%m%d"></mt:SetVarBlock>
<mt:SetVarBlock name="event_close"><mt:If tag="cf_endtime"><$mt:EntryCustomFieldDate field="cf_endtime" format="%y%m%d"><mt:else><$mt:EntryDate format="%y%m%d"$></mt:If></mt:SetVarBlock>
<mt:If name="today" gt="$event_close">
<div>
<p>このイベントは終了しました。</p>
</div>
</mt:If>

でも、Movable Type では『再構築しないと反映されない』という大きな問題が…
Movable Type の標準機能である『日時指定(WordPress の予約投稿と同じ機能)』ですら、サーバで cron の設定をする必要があるので仕方ないですよね。
というわけで、設定してみる。

cd /hoge/hogehoge/piyo/mt/;
./tools/run-periodic-tasks

設定した時刻になっても再構築しない…

run-periodic-tasks」スクリプトを実行すると、指定日投稿などのスケジュールタスクと、公開キューによる再構築が行われます。

なるほど、『公開キュー』の機能を有効にしておかないと再構築はしないみたい。
でも、『公開キュー』の機能を有効にするとすぐに変更等が反映されなくなるので、使いたくない。
というわけで、プラグインを探してみる。
ありました、ありました :-D
株式会社 スカイアークさんの FutureRebuild プラグイン
このプラグインを使うと『指定日非公開』、『再構築のみ』というのを選択できるみたいなのですが、何故か『再構築のみ』だと動作していないみたい。
試しに『指定日非公開』だと設定した日時になると『未公開』になる。
う〜ん、よくわからん。

もう一度プラグインを探してみると、PriodicRebuildAllBlogs プラグインというのがあり、このプラグインだと cron で設定した日時になると再構築してくれました。
めでたしめでたし ;-)

と、言いたいところなんですが、クライアントさんの借りているサーバーが cron を使えないらしい。
チャンチャン… :cry:

というオチで終わるわけにはいかないので、以前の仕事でカスタムフィールドの『ラジオボタン』を使い『公開前』『公開中』『公開後』のどれかを手動で選択してもらって再構築するという方法を使った事があるのですが、それと同じような方法でイベントが終了したら『イベント終了』というラジオボタンにチェックしてもらうという方法で制作するのがいいかなという結論。
まぁ、スマートではないですが…

それとも MT タグは使わずに Movable Type と切り離して、PHP や JavaScript を使うのがいいのかなぁ…

ということで、 cron と日付関連の備忘録。

  • このエントリーをはてなブックマークに追加

フルスクリーンモードを終了するには Esc キーを押してください。または、ココをクリックしてください。