Respuestas:
En su opinión, haga algo como esto:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
Lo siguiente va en el archivo de diseño:
<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>
También es posible encapsular las declaraciones content_for
y yield(:title)
en métodos auxiliares (como ya han sugerido otros). Sin embargo, en casos simples como este, me gusta poner el código necesario directamente en las vistas específicas sin ayudantes personalizados.
<h1><%= content_for(:title, "Title for specific page") %></h1>
, no veo nada en mi DOM (es decir, no tengo <h1></h1>
contenido). Sin embargo mi <title>Title for specific page</title>
está funcionando correctamente. ¿Algunas ideas?
Aquí hay una opción simple que me gusta usar
En su diseño
<head>
<title><%= @title %></title>
</head>
Y en la parte superior de la plantilla de tu página (primera línea)
<% @title="Home" %>
Debido a la forma en que se analizan el diseño y las plantillas de página, se evalúa el @ title = "Inicio" antes de representar el diseño.
La mejor práctica es usar content_for.
Primero, agregue un par de métodos de ayuda (es decir, pegue en 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
Luego, en su vista de diseño, simplemente puede usar:
<title><%= page_title %></title>
... y en la vista misma:
<%= page_heading "Awesome" %>
De esta manera, tiene la ventaja de permitirle barajar donde pegue la etiqueta h1 para su título, y mantiene su controlador agradable y libre de molestas variables @title.
@content_for_title
?
@content_for_title
. Debe ser (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Luego, para establecerlo desde su punto de vista, solo<% content_for :title, 'My Page Title' %>
@content_for_title
es lo que solía suceder cuando lo usabas content_for
, en el momento en que se escribió este comentario. Creo que este ya no es el caso, pero no he mirado recientemente. El comentario de Toby J es correcto para los Rails de hoy. Actualizaré mi respuesta original.
Una mejora en @opsb y una forma más completa de @FouZ :
En application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
En el archivo view erb o su controlador:
<% @title = "Unique Page Title" %>
Busque en content_for
: http://railscasts.com/episodes/8
Sin más detalles sobre el caso de uso o los requisitos que está tratando de satisfacer, puedo pensar en varias alternativas:
1) Cambie el título en una de sus páginas de diseño y consuma un método auxiliar almacenado en application_helper.rb
<title><%= custom_title %></title>
Este enfoque le dará un título único para cada página de diseño.
2) Railscasts sugiere usar un parcial para cargar lo que aparece entre las etiquetas HEAD
3) Use las llamadas javascript / ajax para manipular el DOM si necesita cambiar el título después del evento de carga.
Tal vez realmente no quieras cambiar el contenido etiquetado por el title
elemento. Tal vez realmente necesite una ruta de exploración de algún tipo, para que sus usuarios siempre sepan dónde están con respecto a la jerarquía de navegación de su sitio. Si bien lo hice bien con el complemento goldberg, estoy seguro de que hay otras formas de lograr la misma funcionalidad.
Utilizo "nifty_layout" de nifty_generator que proporciona una variable de título que puedo llamar en la página usando:
<% title "Title of page" %>
También puedo utilizar <% title "Title of page", false %>
el título para que solo se muestre en el título del navegador y no en la página en sí.
También puede configurarlo en un before_filter en su 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>
Luego puede establecer condiciones en el método set_title para establecer diferentes títulos para diferentes acciones en el controlador. Es bueno poder ver todos los títulos de página relevantes dentro de su controlador.
yo suelo este complementoestos ayudantes de Rails escribí: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
enfoque para la titulación de páginas utilizando el método content_for y un parcial
1) nombre parcial: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2) Uso en application.html.erb dentro de la etiqueta de título
<title><%=yield :page_title %></title>
3) Uso en los respectivos * .html.erb excluyendo application.html.erb Solo pegue esto en cualquier .html.erb y proporcione el título de la página
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
En resumen, puedo escribir esto de la siguiente manera
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
Me gusta el método opsb, pero este método también funciona.
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
Me gustaría agregar mi variante bastante simple.
En el 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
Después de eso, puede llamar a get_title desde la etiqueta de título de su diseño. Puede definir un título más específico para su página definiendo la variable @action_title_name en sus acciones.
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
en el diseño y<% content_for :title, "Conditional title" %>
en las vistas.