Movable Type 4のエントリーの日付の管理方法

Movable Type 4ではいろいろなところが変わっていますが、エントリーの日付の管理方法も変更されています。
これについて解説します。

1.エントリーの日付管理方法の変更

Movable Typeのデータベースの各テーブルには、「created_on」というフィールドがあります。
このフィールドは、各種のオブジェクト(エントリーなど)を初めてデータベースに保存した日時を保存するものです。

ただ、従来のMovable Typeでは、エントリーのcreated_onフィールドの値は、エントリーを初めて保存した日時ではなく、エントリーを作成した時点の日時になっています。
たとえば、2007年1月1日10時にエントリーを新規作成し、11時に保存したとすると、created_onフィールドの値は2007年1月1日10時になります。

一方、Movable Type 4では、エントリーのテーブルに「authored_on」というフィールドが追加されました。
authored_onとcreated_onは、以下のように区別されます。

  • authored_on → エントリーを新規作成した時点の日時
  • created_on → エントリーをデータベースに初めて保存した時点の日時

Movable Type 4では、created_onフィールドの意味が他のテーブルと統一されたことになります。

2.この変更の影響

従来のMovable Typeでは、エントリーの日付を処理する場合(たとえばMTEntryDateタグ)、created_onフィールドの値が使われていました。
一方、Movable Type 4では、エントリーの日付としてauthored_onフィールドの値を使うように変更されています。
たとえば、MTEntryDateタグでエントリーの日付を出力すると、authored_onフィールドの値が使われます。

この変更は、既存のプラグインにも影響を及ぼすことがあります。
プラグインの中には、エントリーを日付順に並べ替えて出力するものがあります。
そのタイプのプラグインでは、created_onフィールドの値でエントリーの並べ替えを行っています。
しかし、上で述べたように、今後はauthored_onフィールドがエントリーの日付になり、created_onフィールドとは違いが出ます。

特に、エントリーをインポートしたときに、この点が問題になります。
Movable Type 4では、エントリーをインポートすると、authored_onとcreated_onの各フィールドの値は、以下のように設定されます。

  • authored_on → インポート元ファイルにあるエントリーの日時
  • created_on → インポートしたエントリーがデータベースに保存された日時

インポートの処理は1秒に数エントリー程度行われますので、同じ秒にインポートされた複数のエントリーでは、created_onフィールドの値が同じになります。
そのため、created_onでエントリーを並べ替えると、authored_onで並べ替えたときとかなり異なる結果が出る可能性があります。

また、並べ替えを行っていないプラグインでも、created_onフィールドをエントリーの日付として扱っているものでは、日付が正しくなくなる可能性があります。

3.この問題への対処

ここまでで解説したように、エントリー関連のプラグインでは、エントリーを日付順で並べ替えたときに順序が正しくなくなったり、エントリーの日付が正なくなったりする可能性があります。
プラグインがバージョンアップされて、この問題が修正されることを待つ必要があります。

なお、当方で配布しているプラグインでも、この問題の影響があります。
影響があるプラグインや、影響の程度については、現在調べているところです。