2004年08月01日

「アップデート順のリスト」MT導入と改造

サイドバーにアップデート順のリストを作ってみた。

しかし、<$MTEntryModifiedDate$>がエントリーを最後にアップデートした日付になる ことを期待していたのに、最初に書き込んだ日付になってしまっている。 ソースをざっとみてみた限りではちゃんとmodification_timestampから引っ張ってくる ようになっているし、modification_timestampは保存時のmodified_onからくるように なっている。そして、modified_onはperlのtime関数が元になっているので現在時間に なっているはずだ。

なぜ、ちゃんと動かないのだろうか。

ちょっと次のような原因を考えてみた。

  • MTのデータベースに独自拡張で追加のカラムをつけてしまっているのでなにかがずれた
  • time関数がちゃんと働いていない
  • modified_onにちゃんとデータが保存されていない
  • modified_onからデータちゃんと引き出されていない

…わからん。

追記:

いろいろと試行錯誤しているうちに、どうやら問題はlib\MT\Template\Context.pmの_hdr_dateにあるようだということが分かった。

この関数では、

    my $ts = $args->{ts} || $_[0]->{current_timestamp};
という処理があり、この$tsが最終的に表示される日付になるが、 日付に関連したマクロはみなここに行き着く。 問題の<$MTEntryModificatiedDate$>は、
    $args->{ts} = $args->{modification_timestamp};
としてから、_hdlr_dateを呼び出している。

ところが、_hdlr_date中では$args->{ts}がセットされていない として判断されcurrent_timestamp、つまり作成日付が使われてしまっている。

_hdlr_dateと同じで、current_timestampではなくmodification_timestampを デフォルト値に使う_hdlr_mod_dateという_hdlr_entry_mod_date専用の 関数をつくってみたところうまく動作するようになった。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/44
「アップデート順のリスト」へのコメント  コメントを書く
「アップデート順のリスト」へのトラックバック
コメントを書き込む









メールアドレスを記憶する?


この記事の評価
悪い あんまり 普通 まあまあ 良い





@@@@