Rails:如何改变页面的标题?
什么是在不使用插件的情况下为Rails应用中的页面创build自定义标题的最佳方式?
在你的观点中做这样的事情:
<% content_for :title, "Title for specific page" %> <!-- or --> <h1><%= content_for(:title, "Title for specific page") %></h1>
以下是布局文件:
<head> <title><%= yield(:title) %></title> <!-- Additional header tags here --> </head> <body> <!-- If all pages contain a headline tag, it's preferable to put that in the layout file too --> <h1><%= yield(:title) %></h1> </body>
也可以将content_for
和yield(:title)
语句封装在辅助方法中(正如其他人已经提出的那样)。 但是,在这种简单的情况下,我喜欢将必要的代码直接放到特定的视图中,而无需自定义帮助器。
这是一个我喜欢使用的简单选项
在你的布局
<head> <title><%= @title %></title> </head>
在页面模板的顶部(第一行)
<% @title="Home" %>
由于布局和页面模板被parsing的方式,在布局被渲染之前评估@ title =“Home”。
最佳做法是使用content_for。
首先,添加一些辅助方法(即,粘在app / helpers / application_helper.rb中):
def page_title(separator = " – ") [content_for(:title), 'My Cool Site'].compact.join(separator) end def page_heading(title) content_for(:title){ title } content_tag(:h1, title) end
然后在你的布局视图中,你可以简单地使用:
<title><%= page_title %></title>
…在视图本身:
<%= page_heading "Awesome" %>
这种方式的好处是可以让你随便把你的标题粘贴h1标签,并保持你的控制器很好,没有讨厌的@titlevariables。
对@opsb的改进和@FouZ更完整的forms:
在application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
在视图erb文件或其控制器中:
<% @title = "Unique Page Title" %>
查看content_for
: http : //railscasts.com/episodes/8
如果没有关于您正在尝试满足的用例或要求的更多细节,我可以考虑几个备选scheme:
1)将标题切换到其中一个布局页面,并使用application_helper.rb
存储的辅助方法
<title><%= custom_title %></title>
这种方法将为您提供每个布局页面的唯一标题。
2)Railscastsbuild议使用partial来加载在HEAD标签之间显示的内容
3)如果您需要在加载事件后更改标题,请使用javascript / ajax调用来操作DOM。
也许你真的不想改变title
元素标记的内容。 也许你真的需要某种types的面包屑,以便你的用户总是知道你的网站的导航层次。 虽然我已经完成了如何goldberg插件,我敢肯定还有其他方式拉动相同的function。
我使用nifty_generator的“nifty_layout”,它提供了一个标题variables,我可以在页面上使用:
<% title "Title of page" %>
我也可以使用<% title "Title of page", false %>
标题只显示在浏览器标题中,而不是页面本身。
您也可以将其设置在控制器的before_filter中。
# foo_controller.rb class FooController < ApplicationController before_filter :set_title private def set_title @page_title = "Foo Page" end end # application.html.erb <h1><%= page_title %></h1>
然后,您可以在set_title方法中设置条件,为控制器中的不同操作设置不同的标题。 能够在控制器中看到所有相关的页面标题是很好的。
最好/干净的方式来做到这一点:
<title><%= @page_title or 'Page Title' %></title>
我用 这个插件 这些Rails助手我写道: http ://web.archive.org/web/20130117090719/http: //henrik.nyh.se/2007/11/my-rails-title-helpers/
使用content_for方法和部分页面标题的方法
1。 部分名称:_page_title.html.erb
<%content_for :page_title do %> <%=title%> <%end%>
2。 标题标签中的application.html.erb中的用法
<title><%=yield :page_title %></title>
3。 在相应的* .html.erb中的用法不包括application.html.erb只要将其粘贴在任何.html.erb中,并提供页面的标题
eg : inside index.html.erb <%=render '_page_title', title: 'title_of_page'%>
总之,我可以写下来如下
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
我想添加我非常简单的变体。
在ApplicationController中定义这个方法:
def get_title @action_title_name || case controller_name when 'djs' 'Djs' when 'photos' 'Photos' when 'events' 'Various events' when 'static' 'Info' when 'club' 'My club' when 'news' 'News' when 'welcome' 'Welcome!' else 'Other' end end
之后,您可以从布局的标题标签调用get_title。 您可以通过在您的操作中定义@action_title_namevariables来为页面定义更具体的标题。