Réponses:
Dans votre opinion, faites quelque chose comme ceci:
<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>
Ce qui suit va dans le fichier de mise en page:
<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>
Il est également possible d'encapsuler les instructions content_for
et yield(:title)
dans des méthodes d'assistance (comme d'autres l'ont déjà suggéré). Cependant, dans des cas simples comme celui-ci, j'aime mettre le code nécessaire directement dans les vues spécifiques sans aide personnalisée.
<h1><%= content_for(:title, "Title for specific page") %></h1>
je ne vois rien en sortie dans mon DOM (c'est-à-dire que je n'ai <h1></h1>
aucun contenu). Cependant, mon <title>Title for specific page</title>
fonctionne correctement. Des idées?
Voici une option simple que j'aime utiliser
Dans votre mise en page
<head>
<title><%= @title %></title>
</head>
Et en haut de votre modèle de page (première ligne)
<% @title="Home" %>
En raison de la façon dont la mise en page et les modèles de page sont analysés, @ title = "Home" est évalué avant le rendu de la mise en page.
La meilleure pratique consiste à utiliser content_for.
Tout d'abord, ajoutez quelques méthodes d'assistance (par exemple, stick dans 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
Ensuite, dans votre vue de mise en page, vous pouvez simplement utiliser:
<title><%= page_title %></title>
... et dans la vue elle-même:
<%= page_heading "Awesome" %>
Cette méthode a l'avantage de vous permettre de mélanger les emplacements où vous collez la balise h1 pour votre titre et de garder votre contrôleur agréable et exempt de variables @title embêtantes.
@content_for_title
?
@content_for_title
. Devrait être (content_for(:title) + ' — ' if content_for?(:title)).to_s + 'My Cool Site'
. Ensuite, pour le définir de votre vue, juste<% content_for :title, 'My Page Title' %>
@content_for_title
est ce qui se passait lorsque vous utilisiez content_for
, au moment où ce commentaire a été écrit. Je pense que ce n'est plus le cas, mais je n'ai pas regardé récemment. Le commentaire de Toby J est correct pour les Rails d'aujourd'hui. Je mettrai à jour ma réponse d'origine.
Une amélioration sur @opsb et une forme plus complète de @FouZ :
Dans application.html.erb
:
<title><%= @title || "Default Page Title" %></title>
Dans le fichier view erb ou son contrôleur:
<% @title = "Unique Page Title" %>
Regardez dans content_for
: http://railscasts.com/episodes/8
Sans plus de détails sur le cas d'utilisation ou les exigences que vous essayez de satisfaire, je peux penser à plusieurs alternatives:
1) Changez le titre dans l'une de vos pages de mise en page et utilisez une méthode d'aide stockée dans application_helper.rb
<title><%= custom_title %></title>
Cette approche vous donnera un titre unique pour chaque page de mise en page.
2) Railscasts suggère d'utiliser un partiel pour charger ce qui apparaît entre les balises HEAD
3) Utilisez des appels javascript / ajax pour manipuler le DOM si vous devez changer le titre après l'événement de chargement.
Peut-être que vous ne voulez pas vraiment changer le contenu étiqueté par l' title
élément. Peut-être avez-vous vraiment besoin d'un fil d'Ariane, afin que vos utilisateurs sachent toujours où ils se trouvent par rapport à la hiérarchie de navigation de votre site. Bien que je me sois bien débrouillée avec le plugin goldberg, je suis sûr qu'il existe d'autres moyens de tirer parti des mêmes fonctionnalités.
J'utilise "nifty_layout" de nifty_generator qui fournit une variable de titre que je peux appeler ensuite sur la page en utilisant:
<% title "Title of page" %>
Je peux également utiliser <% title "Title of page", false %>
pour afficher le titre dans le titre du navigateur et non dans la page elle-même.
Vous pouvez également le définir dans un before_filter de votre contrôleur.
# 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>
Vous pouvez ensuite définir des conditions dans la méthode set_title pour définir des titres différents pour différentes actions dans le contrôleur. C'est bien de pouvoir voir tous les titres de page pertinents dans votre contrôleur.
j'utilise ce pluginces aides Rails que j'ai écrites: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/
approche pour le titrage de page à l'aide de la méthode content_for et
1 . nom partiel: _page_title.html.erb
<%content_for :page_title do %>
<%=title%>
<%end%>
2. Utilisation dans application.html.erb à l'intérieur de la balise title
<title><%=yield :page_title %></title>
3. Utilisation dans * .html.erb respectif à l'exclusion de l'application.html.erb Il suffit de coller ceci dans n'importe quel .html.erb et de fournir le titre de la page
e.g : inside index.html.erb
<%=render '_page_title', title: 'title_of_page'%>
En bref, je peux l'écrire comme suit
<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
J'aime la méthode d'opsb, mais cette méthode fonctionne aussi.
<% provide(:title,"ttttttttttttttttttZ") %>
<html>
<head><title><%= yield(:title) %></title></head>
<body></body>
</html>
Je voudrais ajouter ma variante assez simple.
Dans ApplicationController, définissez cette méthode:
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
Après cela, vous pouvez appeler get_title à partir de la balise de titre de votre mise en page. Vous pouvez définir un titre plus spécifique pour votre page en définissant la variable @action_title_name dans vos actions.
<title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>
dans la mise<% content_for :title, "Conditional title" %>
en page et dans les vues.