「アップデート順のリスト」(MT導入と改造) | ◇ ◀ ▲ ▶ |
サイドバーにアップデート順のリストを作ってみた。
しかし、<$MTEntryModifiedDate$>がエントリーを最後にアップデートした日付になる ことを期待していたのに、最初に書き込んだ日付になってしまっている。 ソースをざっとみてみた限りではちゃんとmodification_timestampから引っ張ってくる ようになっているし、modification_timestampは保存時のmodified_onからくるように なっている。そして、modified_onはperlのtime関数が元になっているので現在時間に なっているはずだ。
なぜ、ちゃんと動かないのだろうか。
ちょっと次のような原因を考えてみた。
…わからん。
いろいろと試行錯誤しているうちに、どうやら問題は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専用の 関数をつくってみたところうまく動作するようになった。
「アップデート順のリスト」へのコメント コメントを書く
「アップデート順のリスト」へのトラックバック