títulos de las páginas de rails


No me gusta la forma en que rails hace los títulos de página por defecto (solo usa el nombre del controlador), así que estoy trabajando en una nueva forma de hacerlo así:

Controlador de aplicaciones:

def page_title
    "Default Title Here"
end

Controlador de mensajes:

def page_title
    "Awesome Posts"
end

Diseño de la aplicación:

<title><%=controller.page_title%></title>

Funciona bien porque si no tengo un método page_title en cualquier controlador que esté usando actualmente, vuelve al predeterminado en el controlador de aplicaciones. Pero qué pasa si en mi controlador de usuarios quiero que regrese " Registro" para la" nueva " acción, pero replegarse para cualquier otra acción? ¿Hay alguna manera de hacer eso?

En segundo lugar, ¿alguien más tiene alguna otra forma de hacer títulos de página en rails?

Author: tereško, 2010-10-01

5 answers

No estoy de acuerdo con las otras respuestas, creo que el título no debe establecerse por acción, sino dentro de la vista en sí. Mantenga la lógica de la vista dentro de la vista y la lógica del controlador dentro del controlador.

Dentro de su application_helper.rb añadir:

def title(page_title)
  content_for(:title) { page_title }
end

Luego para insertarlo en su <title>:

<title><%= content_for?(:title) ? content_for(:title) : "Default Title" %></title>

Así que cuando esté en sus vistas, tendrá acceso a todas las variables de instancia establecidas desde el controlador y podrá establecerlas allí. Mantiene el desorden fuera del controlador como bien.

<%- title "Reading #{@post.name}" %>
 85
Author: Garrett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 17:32:00

Me gusta poner un título predeterminado en mi diseño que se puede sobrescribir de una acción configurando @title:

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

Entonces puedes generar un título en tu acción:

def show
  @post = Post.find_by_id params[:id]
  @title = "tybro's blog: #{@post.title}"
end
 7
Author: Raphomet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 17:14:20

Yo haría esto:

# Application Controller
before_filter :set_page_title

private

def set_page_title
  @page_title = "Default Title"
end

Sobrescribir en tus otros controladores

# Users Controller
before_filter :set_page_title

def new # in Users controller
  ...
  @page_title = "Sign up"
  ...
end

private

def set_page_title
  @page_title = "Users"
end

En su opinión:

<title><%= h @page_title %></title>
 2
Author: PeterWong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 16:57:25

Echa un vistazo a Ryan Bates (ryanb de railscasts.com) ingenioso diseño. Tiene un método ahí que hace lo que estás buscando. Es similar a la manera de Garrett, solo que mueve los valores predeterminados en el helper también. Echa un vistazo al ayudante .archivo rb y cómo lo usa link text.

Puede instalar es como gem (y utilizar las otras características agradables) o simplemente utilizar su forma de hacerlo. Solo necesita pasar el valor del título a title en cada vista (o dejarlo caer a la por defecto) y ahí lo tienes. Estoy con Garrett para poner estas cosas en la vista.

 1
Author: DrColossos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-01 17:32:39

Plantilla de diseño

En su diseño (por ejemplo, application.html.erb) agregue:

<title><%= content_for(:page_title) || "Fallback title" %></title>

Plantilla de página

En la plantilla de página te gustaría especificar un título de:

<%- content_for(:page_title, "Specific page title") %>
 0
Author: odlp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 10:41:40