Lokkaのルーティング
lib/lokka/app/entriesを鑑賞。
@theme_types << :index @theme_types << :entries
@theme_typesはどこがつかっているんだろう。
テーマの中かな。
layout.erbで使っているけど、bodyのclass属性を設定しているだけ。
helpersがあやしい。
%w[index search category tag yearly monthly daily post page entry entries].each do |name| define_method("#{name}?") do @theme_types.include?(name.to_sym) end end
またメソッドを作っているね。
@theme_typesにindexが入っているかどうかを調べる、index?とかのメソッドができるのか。
erbにunless index?とか書いてあるものがあるね。
なーるーほーどー。
index?で新だったら、別なページが出せるんだ!!
あと、
entriesのget '/'で
render_detect :index, :entries
は、
def render_detect(*names) render_detect_with_options(names) end def render_detect_with_options(names, options = {}) ret = '' names.each do |name| out = render_any(name, options) unless out.blank? ret = out break end end if ret.blank? raise Lokka::NoTemplateError, "Template not found. #{[names.join(', ')]}" else ret end end
引数の*namesってなんだっけ?
irb(main):008:0> def hoge(*names) irb(main):009:1> puts names.class irb(main):010:1> end => nil irb(main):011:0> hoge :test Array => nil
・・・なるほど。つまり、entriesの前にindexを探すのね。
ぢゃ、entriesはどうやって指定?
常にindexが優先されるようにみえる。
entriesは、何もなかった時のデフォルトなのかな。
現状の理解を整理する。やりたいことは、
- get '/'にはentriesを出さない。
- get '/blog'にentriesを出したい。
だから、
- get '/'は、:index、:entriesの順に調べる。
- :indexをつくれば、:entriesはでない。
- ページのslagに'/blog'を設定
- ページの中にentriesを出す。
こんな感じか。
あああああ
index.hamlをつくったら、
layout.hamlでyieldしたときに、entriesの代わりに呼ばれる!!!
かなり理解できたよ。