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 を読んでみる。
かなり長い……。挫折した。