2006-03-21
[tDiary]特定のカテゴリの記事だけを
並べて表示することってできないのかな? ちょっと調べてみよう。
__
CVSから最新版をとってきたい。これで取得できた。
cvs -d:pserver:anonymous@cvs.sourceforge.net/cvsroot/tdiary login cvs -d:pserver:anonymous@cvs.sourceforge.net/cvsroot/tdiary co core
__
うお、タブだ!
あれ、カテゴリって純粋なプラグインじゃないんだ。 index.rb でこんな場合分けがされている。
elsif @cgi.valid?( 'category' ) tdiary = TDiary::TDiaryCategoryView::new( @cgi, "category.rhtml", conf )
__
なるほど、こういうことか。tdiary.rb の中で cgi#valid? が定義されている。
def valid?( param, idx = 0 )
begin
self.params[param] and self.params[param][idx] and self.params[param][idx].length > 0
rescue NameError # for Tempfile class of ruby 1.6
self.params[param][idx].stat.size > 0
end
end
この valid? 使って最初の挙動を場合分けする。
if @cgi.valid?( 'comment' ) then tdiary = TDiary::TDiaryComment::new( @cgi, "day.rhtml", conf ) elsif @cgi.valid?( 'date' ) (省略) elsif @cgi.valid?( 'category' ) tdiary = TDiary::TDiaryCategoryView::new( @cgi, "category.rhtml", conf ) else tdiary = TDiary::TDiaryLatest::new( @cgi, "latest.rhtml", conf ) end
ぱっと見それぞれはこんな挙動だと予想できる。
- comment …… コメントの書き込み
- date …… 記事表示
- category …… カテゴリ表示
- それ以外 …… 最近の記事表示
date モードは渡された値によってさらに場合分けされている。
date = @cgi.params['date'][0]
if /^\d{8}-\d+$/ =~ date then
tdiary = TDiary::TDiaryLatest::new( @cgi, "latest.rhtml", conf )
elsif /^\d{8}$/ =~ date
tdiary = TDiary::TDiaryDay::new( @cgi, "day.rhtml", conf )
elsif /^\d{6}$/ =~ date then
tdiary = TDiary::TDiaryMonth::new( @cgi, "month.rhtml", conf )
elsif /^\d{4}$/ =~ date then
tdiary = TDiary::TDiaryNYear::new( @cgi, "month.rhtml", conf )
end
date モードのときに記事の形式パタンを定義したクラスを呼び出すようだ。
TDiaryLatest, TDiaryDay , TDiaryMonth, TDiaryNYearというクラスがあるから、これらのクラスの中で記事を抽出しているものと思われる。こういったクラスを作らずに、記事の検索条件をパラメータとして与えて表示する記事をセレクトしたり、並べ替えたりできるインターフェースがあるとといい気がするけどどうだろう、という思いを抱きつつこれらの中身を見てみよう。
__
ますは TDiaryLatest を読んでみる。
かなり長い……。挫折した。