Respostas:
Na sua opinião, faça algo assim:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
O seguinte está no arquivo de layout:
<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>
Também é possível encapsular as instruções content_for
e yield(:title)
nos métodos auxiliares (como outros já sugeriram). No entanto, em casos simples como este, eu gosto de inserir o código necessário diretamente nas visualizações específicas, sem auxiliares personalizados.
<h1><%= content_for(:title, "Title for specific page") %></h1>
, não vejo nada no meu DOM (ou seja, não tenho <h1></h1>
conteúdo). No entanto, o meu <title>Title for specific page</title>
está funcionando corretamente. Alguma ideia?
Aqui está uma opção simples que eu gosto de usar
No seu layout
<head>
<title><%= @title %></title>
</head>
E na parte superior do seu modelo de página (primeira linha)
<% @title="Home" %>
Devido à maneira como o layout e os modelos de página são analisados, o @ title = "Home" é avaliado antes da renderização do layout.
A melhor prática é usar o content_for.
Primeiro, adicione alguns métodos auxiliares (por exemplo, cole em 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
Em sua exibição de layout, você pode simplesmente usar:
<title><%= page_title %></title>
... e na própria exibição:
<%= page_heading "Awesome" %>
Dessa forma, você tem a vantagem de permitir que você embaralhe onde coloca a tag h1 do seu título e mantém seu controlador agradável e livre de variáveis @title irritantes.
@content_for_title
?
@content_for_title
. Deveria ser (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Então, para defini-lo da sua opinião, apenas<% content_for :title, 'My Page Title' %>
@content_for_title
é o que costumava acontecer quando você usava content_for
, no momento em que este comentário foi escrito. Acredito que esse não seja mais o caso, mas não olhei recentemente. O comentário de Toby J está correto no Rails de hoje. Vou atualizar minha resposta original.
Uma melhoria no @opsb e uma forma mais completa do @FouZ 's:
Em application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
No arquivo view erb ou em seu controlador:
<% @title = "Unique Page Title" %>
Veja em content_for
: http://railscasts.com/episodes/8
Sem mais detalhes sobre o caso de uso ou os requisitos que você está tentando satisfazer, posso pensar em várias alternativas:
1) Mude o título em uma das suas páginas de layout e consuma um método auxiliar armazenado em application_helper.rb
<title><%= custom_title %></title>
Essa abordagem fornecerá um título exclusivo para cada página de layout.
2) O Railscasts sugere o uso de um parcial para carregar o que aparece entre as tags HEAD
3) Use chamadas javascript / ajax para manipular o DOM, se você precisar alterar o título após o evento de carregamento.
Talvez você realmente não queira alterar o conteúdo marcado pelo title
elemento. Talvez você realmente precise de algum tipo de trilha de navegação, para que seus usuários sempre saibam onde estão com relação à hierarquia de navegação do seu site. Embora tenha me saído bem com a forma como o plug-in goldberg, tenho certeza de que existem outras maneiras de obter a mesma funcionalidade.
Você também pode configurá-lo em um before_filter no seu controlador.
# 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>
Você pode então definir condições no método set_title para definir títulos diferentes para ações diferentes no controlador. É bom poder ver todos os títulos de páginas relevantes em seu controlador.
eu uso este pluginesses ajudantes do Rails que escrevi: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
abordagem para a titulação de páginas usando o método content_for e uma
1 nome parcial: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2) Uso em application.html.erb na tag title
<title><%=yield :page_title %></title>
3) Uso no respectivo * .html.erb, excluindo application.html.erb Basta colocar isso em qualquer .html.erb e fornecer o título da página
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
Em resumo, posso escrever isso da seguinte maneira
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
Eu gosto do método opsb, mas esse método também funciona.
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
Gostaria de adicionar minha variante bastante simples.
No ApplicationController, defina este método:
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
Depois disso, você pode chamar get_title na tag de título do seu layout. Você pode definir um título mais específico para sua página, definindo a variável @action_title_name em suas ações.
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
no layout e<% content_for :title, "Conditional title" %>
nas visualizações.