QA #1075
未完了404などのエラー画面を変更可能にしたい
0%
説明
■現象/要望¶
多くのWebサイトでは、指定したページが存在しなかった場合、単に404を表示するのではなく、
検索画面などを表示して、ユーザの操作をナビゲートしている。
例えば、Githubの場合、404の表示だけでなく、Search boxを表示している。
例
https://github.com/redmine/redmice
しかし、Redmineの場合、入力したissue-noまたはproject-identifierが存在しない場合、単に404を表示するだけである。
例
https://redmine.org/issues/99999
単に404の定型文で無く、各サイトで定義したメッセージとリンクを表示可能にすれば、サーバ管理者の意図を伝え易くなり、Redmineをより使い易くできる。
本家チケット起票済
https://redmine.org/issues/32844
賛成の方は、上記チケットに +1 お願いします。
■解決策¶
■対応状況¶
画面表示処理自体を変更するには、下記コードを修正すればよい。
app/controller/application_controller.rb
app/views/common/error.html.erb
しかし、エンドユーザ側でカスタマイズ可能にすべきなので、
システムで編集可能なWiki画面などにredirectした方が良いと思われる。
viewcustomizeで下記エラー画面を加工しても良さそう。
banner pluginで関連情報を常時表示する方法もある。
正常にアクセスできる場合も表示するのでワークアラウンドとして扱うべきだが。
https://github.com/akiko-pusu/redmine_banner/
■補足¶
関連コード
app/controller/application_controller.rb
def render_404(options={})
render_error({:message => :notice_file_not_found, :status => 404}.merge(options))
return false
end
# Renders an error response
def render_error(arg)
arg = {:message => arg} unless arg.is_a?(Hash)
@message = arg[:message]
@message = l(@message) if @message.is_a?(Symbol)
@status = arg[:status] || 500
respond_to do |format|
format.html {
render :template => 'common/error', :layout => use_layout, :status => @status
}
format.any { head @status }
end
end
app/views/common/error.html.erb
<h2><%= @status %></h2>
<% if @message.present? %>
<p id="errorExplanation"><%= @message %></p>
<% end %>
<% if @archived_project && User.current.admin? %>
<p><%= link_to l(:button_unarchive), unarchive_project_path(@archived_project), :method => :post, :class => 'icon icon-unlock' %></p>
<% end %>
<p><a href="javascript:history.back()"><%= l(:button_back) %></a></p>
<% html_title @status %>
~