web-dev-qa-db-fra.com

Rails: Comment changer le titre d'une page?

Quel est le meilleur moyen de créer un titre personnalisé pour les pages d'une application Rails sans utiliser de plug-in?

151
wusher

Selon vous, 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 disposition:

<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 tels que celui-ci, j'aime mettre le code nécessaire directement dans les vues spécifiques sans aide personnalisée.

229

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 manière dont la présentation et les modèles de page sont analysés, @ title = "Home" est évalué avant le rendu de la présentation.

115
opsb

La meilleure pratique consiste à utiliser content_for.

Tout d’abord, ajoutez quelques méthodes d’aide (par exemple, collez 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 présentation, vous pouvez simplement utiliser:

<title><%= page_title %></title>

... et dans la vue même:

<%= page_heading "Awesome" %>

Cette méthode a l’avantage de vous permettre de mélanger où vous collez la balise h1 pour votre titre et de garder votre contrôleur agréable et exempt de variables embêtantes @title.

49
Aupajo

Une amélioration de @ opsb et une forme plus complète de @ FouZ:

Dans application.html.erb:

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

Dans la vue fichier erb ou son contrôleur:

<% @title = "Unique Page Title" %>
20
boulder_ruby

Regardez dans content_for: http://railscasts.com/episodes/8

13
Avdi

Sans plus de détails sur le cas d'utilisation ou les exigences que vous essayez de satisfaire, je peux penser à plusieurs alternatives:

1) Basculez 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 les appels javascript/ajax pour manipuler le DOM si vous devez modifier le titre après l'événement de chargement.

Peut-être que vous ne voulez pas vraiment changer le contenu marqué par l'élément title. Peut-être avez-vous vraiment besoin d'un fil d'Ariane pour 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é avec le plug-in goldberg, je suis sûr qu'il existe d'autres moyens de tirer parti de la même fonctionnalité.

6
Alan

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 que le titre apparaisse simplement dans le titre du navigateur et non dans la page elle-même.

3
sent-hil

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 différents titres pour différentes actions dans le contrôleur. Il est agréable de pouvoir voir tous les titres de page pertinents dans votre contrôleur.

2
JasonOng

La meilleure façon de le faire:

<title><%= @page_title or 'Page Title' %></title>
0
FouZ

J'aime la méthode opsb, mais cette méthode fonctionne aussi.

<% provide(:title,"ttttttttttttttttttZ") %>
<html>
  <head><title><%= yield(:title) %></title></head>
   <body></body>
</html>
0
barlop

En bref, je peux écrire ceci comme suit

<%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %>
0
Mukesh Kumar Gupta
0
Henrik N

approche pour titrer la page en utilisant la méthode content_for et une méthode partielle

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 les fichiers * .html.erb respectifs sauf application.html.erb Il suffit de coller ceci dans n'importe quel fichier .html.erb et de fournir le titre de la page.

    e.g : inside index.html.erb

    <%=render '_page_title', title: 'title_of_page'%>
0
Kofi Asare