it-swarm.com.de

Rails: Wie kann man den Titel einer Seite ändern?

Was ist der beste Weg, um einen benutzerdefinierten Titel für Seiten in einer Rails-App zu erstellen, ohne ein Plug-In zu verwenden?

151
wusher

Tun Sie in Ihren Ansichten so etwas:

<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>

Folgendes geht in die Layoutdatei:

<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>

Es ist auch möglich, die Anweisungen content_for und yield(:title) in Hilfsmethoden zu kapseln (wie andere bereits vorgeschlagen haben). In einfachen Fällen wie diesem möchte ich jedoch den erforderlichen Code ohne benutzerdefinierte Helfer direkt in die jeweiligen Ansichten einfügen.

229

Hier ist eine einfache Option, die ich gerne benutze

In deinem Layout

<head>
  <title><%= @title %></title>
</head>

Und ganz oben in Ihrer Seitenvorlage (erste Zeile)

<% @title="Home" %>

Da das Layout und die Seitenvorlagen analysiert werden, wird @ title = "Home" ausgewertet, bevor das Layout gerendert wird.

115
opsb

Am besten verwenden Sie content_for.

Fügen Sie zunächst ein paar Hilfsmethoden hinzu (zB 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

Dann können Sie in Ihrer Layoutansicht einfach Folgendes verwenden:

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

... und in der Ansicht selbst:

<%= page_heading "Awesome" %>

Dieser Weg hat den Vorteil, dass Sie die Position des Titels h1 für Ihren Titel mischen können und Ihren Controller schön und frei von lästigen @ title-Variablen halten.

49
Aupajo

Eine Verbesserung gegenüber @ opsb und eine vollständigere Form von @ FouZ:

In application.html.erb:

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

In der Ansicht erb file oder seinem Controller:

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

Schauen Sie in content_for: http://railscasts.com/episodes/8

13
Avdi

Ohne weitere Details zum Anwendungsfall oder zu den Anforderungen, die Sie erfüllen möchten, fallen mir mehrere Alternativen ein:

1) Wechseln Sie den Titel auf einer Ihrer Layoutseiten und verwenden Sie eine in application_helper.rb gespeicherte Hilfsmethode.

<title><%= custom_title %></title>

Dieser Ansatz gibt Ihnen einen eindeutigen Titel für jede Layoutseite.

2) Railscasts schlägt vor, ein Partial zu verwenden, um das zu laden, was zwischen den HEAD - Tags angezeigt wird

3) Verwenden Sie Javascript/Ajax-Aufrufe, um das DOM zu bearbeiten, wenn Sie den Titel nach dem Ladeereignis ändern müssen.

Möglicherweise möchten Sie den durch das Element title markierten Inhalt nicht wirklich ändern. Möglicherweise benötigen Sie wirklich eine Art Breadcrumb, damit Ihre Benutzer immer wissen, wo sie sich in Bezug auf die Navigationshierarchie Ihrer Website befinden. Ich habe zwar mit dem Goldberg-Plugin gut gearbeitet, aber ich bin mir sicher, dass es andere Möglichkeiten gibt, die gleiche Funktionalität zu nutzen.

6
Alan

Ich verwende nifty_generators "nifty_layout", das eine Titelvariable enthält, die ich dann auf der Seite aufrufen kann:

<% title "Title of page" %>

Ich kann auch <% title "Title of page", false %> verwenden, damit der Titel nur im Browsertitel und nicht in der Seite selbst angezeigt wird.

3
sent-hil

Sie können es auch in einem before_filter in Ihrem Controller einstellen.

# 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>

Sie können dann in der set_title -Methode Bedingungen festlegen, um unterschiedliche Titel für verschiedene Aktionen in der Steuerung festzulegen. Es ist schön, alle relevanten Seitentitel in Ihrem Controller anzeigen zu können.

2
JasonOng

Der beste/saubere Weg, dies zu tun:

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

Ich mag die Methode von opsb, aber diese Methode funktioniert auch.

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

Kurz gesagt, ich kann dies folgendermaßen aufschreiben

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

ansatz für Seitentitel mit content_for-Methode und einer partiellen

1 Teilname: _page_title.html.erb

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

2 Verwendung in application.html.erb im title-Tag

   <title><%=yield :page_title %></title>

3 . Verwendung in den entsprechenden * .html.erb-Ausnahmen ohne Anwendung.html.erb Kleben Sie dies einfach in ein beliebiges .html.erb und geben Sie den Titel der Seite an

    e.g : inside index.html.erb

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