Rails: как изменить заголовок страницы?

каков наилучший способ создания пользовательского заголовка для страниц в приложении Rails без использования плагина?

14 ответов


в ваших представлениях сделайте что-то вроде этого:

<% 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" %>

из-за способа анализа макета и шаблонов страниц @title="Home" оценивается перед отображением макета.


рекомендуется использовать content_for.

во-первых, добавить несколько вспомогательных методов (т. е. палки в приложение/помощники/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 для своего заголовка, и сохраняет ваш контроллер приятным и свободным от надоедливых переменных @title.


на @opsb и более полная форма @сайт fouzs:

на application.html.erb:

<title><%= @title || "Default Page Title" %></title>

в представлении erb-файла или его контроллера:

<% @title = "Unique Page Title" %>

посмотреть в content_for: http://railscasts.com/episodes/8


без дополнительной информации об использовании или требования, которые вы пытаетесь удовлетворить, я могу придумать несколько вариантов:

1) переключите заголовок на одной из ваших страниц макета и используйте вспомогательный метод, хранящийся в application_helper.rb

<title><%= custom_title %></title>

этот подход даст вам уникальный заголовок для каждой страницы макета.

2) Railscasts предлагает использовать частичную загрузку того, что отображается между тегами HEAD

3) Используйте вызовы javascript / ajax для управления DOM, если вам нужно изменить заголовок после события load.

возможно, вы действительно не хотите изменять содержимое, помеченное title элемент. Возможно, вам действительно нужна какая-то хлебная крошка, чтобы ваши пользователи всегда знали, где они находятся относительно иерархии навигации вашего сайта. Хотя я отлично справился с плагином goldberg, я уверен, что есть другие способы снять ту же функциональность.


Я использую nifty_generator "nifty_layout", который предоставляет переменную заголовка, которую я могу вызвать на странице, используя:

<% 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>

Я использую плагин эти рельсы помощники я написал: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/


подход к заголовку страницы с использованием метода content_for и частичного

1 . частичное имя : _page_title.формат html.Эрб

<%content_for :page_title do %>
 <%=title%>
<%end%>

2 . Использование в приложении.формат html.erb внутри тега заголовка

   <title><%=yield :page_title %></title>

3 . Использование в соответствующем *.формат html.erb исключая применение.формат html.Эрб Просто засунь это в любой .формат html.erb и заголовок страницы

    e.g : inside index.html.erb

    <%=render '_page_title', title: 'title_of_page'%>

короче говоря, я могу записать это следующим образом

<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>

Мне нравится метод opsb, но этот метод тоже работает.

<% provide(:title,"ttttttttttttttttttZ") %>
<html>
  <head><title><%= yield(:title) %></title></head>
   <body></body>
</html>

Я хотел бы добавить свой довольно простой вариант.

в 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_name в своих действиях.