タグ繋がりの関連エントリを表示する Typo の Helper
書いた人: noriaki 2007,07月21日(土) 16:37
私は,Blogを訪れてくれた人にはできるだけ多くのエントリを読んでもらいたいと思っています.また,検索エンジンなどを経由して来てくれた人は,行き着いたエントリ内容に関連した他エントリも見たいと思うのではないでしょうか.
とすると,関連エントリが各エントリの下部に合わせて表示されていると便利だと思うのですが,関連エントリを手作業で選択してリンクを作成するのは大変です.
そこで,エントリに付けたタグで繋がる他のエントリを関連エントリとして表示するTypo用のRailsヘルパを書いてみましたので紹介します.
relevance_articles(article, limit = 5)
引数で渡されたエントリに付いているタグから関連エントリを検索して表示するHelperメソッドです.デフォルトでは5エントリ表示します.
app/helper/article_helper.rb
def relevance_articles(article, limit = 5)
article.tags.map do |tag|
"<h3>#{h tag.display_name}タグの付いた他のエントリ</h3>\n" +
"<ul>\n" +
tag.articles.find(:all,
:conditions => ["NOT id = ?", article.id],
:order => "created_at DESC",
:limit => limit
).map do |relevance_article|
"<li>" +
link_to(relevance_article.title, relevance_article.location) +
"</li>"
end.join("\n") +
"</ul>"
end.join("\n")
end
使い方
表示したいViewで引数にエントリのインスタンスを与えて relevance_articles メソッドを呼び出します.
例えば,このブログでは以下のように使っています.
app/view/article/_article.rhtml
<h2><%= article_link article.title, article %></h2>
<p class="auth"><%=h _('Posted by') %> <%= author_link(article) %>
<%= js_distance_of_time_in_words_to_now article.published_at %></p>
<%= article.body_html %>
<div class="relevance"><%= relevance_articles article %></div>

