72 votes

Rails 3 - Moyen idéal pour définir le titre des pages

Quelle est la bonne façon de définir le titre de la page en rails 3. Actuellement, je suis le suivant:

app / views / layouts / application.html:

 <head>
  <title><%= render_title %></title>
  <%= csrf_meta_tag %>
 

app / helpers / application_helper.rb:

 def render_title
  return @title if defined?(@title)
  "Generic Page Title"
end
 

app / controllers / some_controller.rb:

 def show
  @title = "some custom page title"
end
 

Existe-t-il une autre / meilleure façon de faire ce qui précède?

132voto

Andrea Pavoni Points 3392

vous pourriez un simple assistant:

 def title(page_title)
  content_for :title, page_title.to_s
end
 

utilisez-le dans votre mise en page:

 <title><%= yield(:title) %></title>
 

puis appelez-le à partir de vos modèles:

 <% title "Your custom title" %>
 

J'espère que cela t'aides ;)

52voto

griable Points 451

Il n'est pas nécessaire de créer une fonction / aide supplémentaire. Vous devriez jeter un oeil à la documentation .

Dans la mise en page de l'application

 <% if content_for?(:head) %>
  <%= content_for(:head) %>
<% else %>
  <title>Default title</title>
<% end %>
 

Dans la mise en page spécifique

 <% content_for :head do %>
  <title>Custom title</title>
<% end %>
 

41voto

Jits Points 5595

J'ai trouvé que apeacox la solution n'a pas fonctionné pour moi (dans les Rails 3.0.3).

Au lieu de cela je l'ai fait...

En application_helper.rb:

def title(page_title, options={})
  content_for(:title, page_title.to_s)
  return content_tag(:h1, page_title, options)
end

Dans la mise en page:

<title><%= content_for(:title) %></title>

Dans la vue:

<% title "Page Title Only" %>

OU:

<%= title "Page Title and Heading Too" %>

Remarque, cela nous permet également de vérifier la présence d'un titre et de définir un titre par défaut dans les cas où la vue n'est pas spécifié.

Dans le layout, on peut faire quelque chose comme:

<title><%= content_for?(:title) ? content_for(:title) : 'This is a default title' %></title>

2voto

cowboycoded Points 7505

@akfalcon - je utiliser une stratégie similaire, mais sans l'aide.. je viens de définir la valeur par défaut @titre dans le contrôleur de l'application et ensuite utiliser, <%=@titre%> dans ma mise en page. Si je veux remplacer le titre, j'ai mis de nouveau dans l'action du controller comme vous le faites. Pas quelque chose de magique, mais il fonctionne très bien. Je fais la même chose pour les meta description et mots-clés.

Je suis en train de penser à propos de le déplacer vers la base de données si un admin pouvait changer les titres,etc ... sans avoir à mettre à jour les Rails de code. Vous pouvez créer un PageTitle modèle avec du contenu, de l'action et de contrôleur. Puis créer un helper qui trouve la PageTitle pour le contrôleur/action que vous êtes en train de rendu (à l'aide de nom_controller et nom_de_action variables). Si aucune correspondance n'est trouvée, puis revenir à la valeur par défaut.

@apeacox - est-il avantageux de définir le titre dans le modèle? Je pense qu'il serait mieux de le placer dans le contrôleur que le titre est directement lié à l'action d'être appelé.

1voto

Ramkumar M K Points 213

J'ai trouvé cela très utile en cas de définition du titre de ma page. https://gist.github.com/hiroshi/985457 https://github.com/clmntlxndr/content_for_in_controllers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X