tDiary :: category.rb を複数年表示に対応させる
カテゴリ別表示のアドレス欄に「year=ALL」 と入れてみて、tDiary の吐くエラーにやっぱりダメかと思った人も多いのではないでしょうか。そんな誰もが一度は通る道を、少しばかり進んでみました。手を入れるのは、tdiary.rb, index.rb, category.rhtml の三つのファイル。
※ 日記ログが大きいとサーバーにかなりの負荷がかかってしまいます。正式に実装されるのを待った方が良いようです。
まずは tdiary.rb。新しく class TDiaryCategoryAllYear を追加します。1580行目辺りの TDiaryCategoryYear を雛形として使うので、20行ばかり丸ごとコピーして 1600行目辺りにペースト。追加するコードは次の太字で示した5箇所。
#
# class TDiaryCategoryAllYear
# show category by all year
#
class TDiaryCategoryAllYear < TDiaryCategoryView
def initialize(cgi, rhtml, conf)
super
calendar
@years.keys.sort.each do |@year|
@date = Time::local(@year, 1, 1)
@years[@year.to_s].each do |m|
@date = Time::local(@year, m, 1)
@io.transaction(@date) do |diaries|
@diaries = diaries
DIRTY_NONE
end
categorize
end
end
end
end
次は、index.rb。42行目からの if ブロックを変更。追加するコードは次の太字で示した5箇所。
if @cgi.valid?( 'month' ) && @cgi.params['year'][0] != 'ALL'
if @cgi.params['month'][0] == 'ALL'
tdiary = TDiary::TDiaryCategoryYear::new(@cgi, "category.rhtml", conf )
else
tdiary = TDiary::TDiaryCategoryMonth::new(@cgi, "category.rhtml", conf )
end
elsif @cgi.valid?( 'year' )
if @cgi.params['year'][0] == 'ALL'
tdiary = TDiary::TDiaryCategoryAllYear::new(@cgi, "category.rhtml", conf )
else
tdiary = TDiary::TDiaryCategoryYear::new(@cgi, "category.rhtml", conf )
end
else
tdiary = TDiary::TDiaryCategoryLatest::new(@cgi, "category.rhtml", conf )
end
最後は category.rhtml。13行目からの when /year/ ブロック内を変更。追加するコードは次の太字で示した5箇所。
when /year/
if @cgi.params['year'][0] == 'ALL'
label = %Q|category_title_year('ALL')|
param = ["year=ALL"]
else
label = %Q|category_title_year(#{@year})|
param = ["year=#{@year}"]
end
ひとまずこんな所で。とりあえず、こんな感じ のことが出来ます。year=ALL 指定時は、month オプションは無視されます。
ちなみに私は、理由はよくわからないけど動けばOKな人なので、予めご了承下さい。tDiary の仕組みや、Ruby の文法は未修得だったりします。tdiary.rb や index.rb をいじることになるので、もし試される方がいらっしゃいましたら自己責任でお願します。
tDiary :: カテゴリ表示の昇順・降順
Ruby はさっぱりなので、Ruby リファレンスマニュアル - Arrayの項 を見ていたら、カテゴリ表示の昇順・降順を変えられそうなことに気がつきました。category.rhtml の 32行目をちょっと変更するだけ。
@categorized[c].sort.reverse.each do |date, idx, s|
引数で昇順・降順を切替出来るようにすると便利かもなぁ。問題は昇順と降順の定義を本人が把握してないことだ。
tdiary.rb や index.rb まわりで色々実験するには、やはり tDiary のキャッシュを無効にしてないと更新がすぐに反映されないようです。幸い、先日の きたさんの日記 (2004.1.15) にて、キャッシュを無効にする方法が公開されていたので非常に助かりました。
さすがに XREA鯖上で実験するのはまずかろうと思い、今回はローカル (WinXP) に AnHttpd 1.4.2k + Ruby 1.8.1 + tDiary 1.5.5 をインストールしてみましたが、恐ろしいほど簡単に動いてビックリ。XREA鯖上にインストールしたときは小一時間程かかって大変だったのになぁ。まぁ、あれも結局はキャッシュにやられたんですけど。これを機に、ちょっと Ruby でも遊んでみようかな。
internet advertising
business cards http:
loan calculator http