redmine 読み (3)
継続は welcome な index.html あたりか。当座の残が以下。
- app/views/welcome/index.html.erb
- app/controllers/application_controller.rb
app/views/welcome/index.html.erb
以下がアレ
- Projects な部分の記述
- content_for :header_tags な部分の記述
の前に
call_hook 云々について確認を。
これって redmine 独自の機能 (?) らしいですね。例えば News のソレだと以下な記述。
<%= call_hook(:view_welcome_index_left, :projects => @projects) %>
む、:view_welcome_index_left は関数名とか書いてありますが、そんなもん見当らないですね。色々ググッてるとこれってカスタマイズ用に手続きを呼び出してくれるソレを事前に定義してるんですね。これもすばら。
現時点ではこの手続きは無いですが plugin を追加して例えば上のソレであれば view_welcome_index_left という手続きを定義して情報を追加するコード (というか erb なコード?) を書いてあげれば redmine 本体に影響しない形で見栄えの変更が可能、ということになるのか。わははは的ですな。
これってどんな仕掛けを使って実装しているのか、は要確認ですね。とりあえずここは宿題ということで。
Projects な部分の記述
こちらは for で繰り返しています。繰り返しの中で link_to_project という手続きを呼び出していますね。これは app/helpers/application_helper.rb で定義されている模様。中でこんなことしてるんですが
def link_to_project(project, options={}, html_options = nil) if project.archived? h(project) else url = {:controller => 'projects', :action => 'show', :id => project}.merge(options) link_to(h(project), url, html_options) end end
h てオブジェクト渡すとどうなるんでしょ。独自改造してあるとか? ちなみに archived? ってのは redmine マターな考えかたで終了したプロジェクトは削除ではなくて archive される、とのこと。定義を見てやれ、と言いつつ .rbenv 以下を grep したところ、確かに erb.rb というソレの中ですね。
.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/erb.rb
def html_escape(s) s.to_s.gsub(/&/, "&").gsub(/\"/, """).gsub(/>/, ">").gsub(/</, "<") end alias h html_escape module_function :h module_function :html_escape
to_s しとるのか。成程。そゆ意味では else 句の url に代入されてるソレも気になりますね。これも link_to の中で云々、なのか。一応 show な action に渡す id な hash の値がオブジェクト、というのは書き方としてデフォな模様。
content_for とかなあたり
ファイル末端らへんですね。content_for って何かと思ったら head にある yield を置換するもの、とのこと。
app/views/layout/base.html.erb の該当部分が以下。
<!-- page specific tags --> <%= yield :header_tags -%> </head>
app/views/welcome/index.html.erb の末端らへんの記述が以下。
<% content_for :header_tags do %> <%= auto_discovery_link_tag(:atom, {:controller => 'news', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, :title => "#{Setting.app_title}: #{l(:label_news_latest)}") %> <%= auto_discovery_link_tag(:atom, {:controller => 'activities', :action => 'index', :key => User.current.rss_key, :format => 'atom'}, :title => "#{Setting.app_title}: #{l(:label_activity)}") %> <% end %>
この中身は一体何なのかと言いつつググると以下が hit
feed 検出機能を有効、とあります。成程。つうかフィードへのパス、というのはどーゆー意味なのかな。ちょっと google 先生でリハビリ。
とりあえず、News と Project な RSS フィードを云々する機能だろうと勝手読み。
次
news および activities なコントローラに着手の方向。