Rails: Comment changer le titre d’une page?

Quelle est la meilleure façon de créer un titre personnalisé pour les pages d’une application Rails sans utiliser de plug-in?

Dans vos vues faites quelque chose comme ceci:

<% content_for :title, "Title for specific page" %>  

<%= content_for(:title, "Title for specific page") %>

Ce qui suit va dans le fichier de mise en page:

  <%= yield(:title) %>     

<%= yield(:title) %>

Il est également possible d’encapsuler les instructions content_for et yield(:title) dans les méthodes d’assistance (comme d’autres l’ont déjà suggéré). Cependant, dans des cas simples comme celui-ci, j’aime placer le code nécessaire directement dans les vues spécifiques sans aide personnalisée.

Voici une option simple que j’aime utiliser

Dans votre mise en page

  <%= @title %>  

Et en haut de votre modèle de page (première ligne)

 <% @title="Home" %> 

En raison de la manière dont les modèles de mise en page et de page sont analysés, le @ 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’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:

 <%= page_title %> 

… et dans la vue même:

 <%= page_heading "Awesome" %> 

De cette façon, vous avez l’avantage de vous permettre de mélanger le tag h1 à votre titre et de garder votre contrôleur agréable et exempt de variables @title gênantes.

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

Dans application.html.erb :

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

Dans le fichier de vue 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’assistance stockée dans application_helper.rb

 <%= custom_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 changer le titre après l’événement load.

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 sois bien avec la façon dont le plugin goldberg, je suis sûr qu’il existe d’autres moyens de tirer la même fonctionnalité.

J’utilise “nifty_layout” de nifty_generator qui fournit une variable 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.

Vous pouvez également le définir dans un avant_filtre dans 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 

<%= page_title %>

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 pages pertinents dans votre contrôleur.

La meilleure façon de faire cela:

 <%= @page_title or 'Page Title' %> 

approche pour titrage de page en utilisant la méthode content_for et un partiel

1 . nom partiel: _page_title.html.erb

 <%content_for :page_title do %> <%=title%> <%end%> 

2. Utilisation dans application.html.erb dans la balise title

  <%=yield :page_title %> 

3. Utilisation dans les fichiers * .html.erb respectifs à l’exception de application.html.erb Collez ceci dans n’importe quel fichier .html.erb et indiquez le titre de la page.

  eg : inside index.html.erb <%=render '_page_title', title: 'title_of_page'%> 

En bref, je peux écrire ceci comme suit

 <%content_for :page_title do %><%= t :page_title, "Name of Your Page" %> <% end %> 

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

 <% provide(:title,"ttttttttttttttttttZ") %>  <%= yield(:title) %>   

Je voudrais append 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 modèle. Vous pouvez définir un titre plus spécifique pour votre page en définissant la variable @action_title_name dans vos actions.